鏡像加速
如果發現Docker拉取鏡像的速度非常緩慢,可以配置加速器來解決
在這裏使用阿里雲的加速地址:
https://br10hqrl.mirror.aliyuncs.com
修改Docker的配置文件來設置加速地址
vim /etc/docker/daemon.json(如果沒有該文件,新建一個)
{
"registry-mirrors": ["https://br10hqrl.mirror.aliyuncs.com"]
}
使配置文件生效
systemctl daemon-reload && systemctl restart docker
鏡像
1. 獲取鏡像(下載鏡像到本地)
可以使用 docker pull
命令來從倉庫獲取所需要的鏡像。
格式:
docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]
具體選項可通過 docker pull --help
下面的例子將從 Docker Hub 倉庫下載一個 Ubuntu 12.04 操作系統的鏡像。
完成後,即可隨時使用該鏡像了,例如創建一個容器,讓其中運行 bash 應用。
[root@docker docker]# docker run -it ubuntu:latest /bin/bash
root@1b85b5b911b2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@1b85b5b911b2:/# cat /proc/version
Linux version 3.10.0-1062.9.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Fri Dec 6 15:49:49 UTC 2019
root@1b85b5b911b2:/#
其中,-t
選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上, -i
則讓容器的標準輸入保持打開。
另:,需要讓 Docker 容器在後臺以守護態(Daemonized)形式運行。此時,可以通過添加 -d
參數來實現。
2. 列出本地鏡像
使用 docker images
或 docker image ls顯示本地已有的鏡像。
[root@docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ccc6e87d482b 13 days ago 64.2MB
在列出信息中,可以看到幾個字段信息
- 來自於哪個倉庫,比如 ubuntu
- 鏡像的標記,比如 latest
- 它的
ID
號(唯一) - 創建時間
- 鏡像大小
鏡像ID是鏡像的唯一標識,一個鏡像可以對應對個標籤,因此在上面的例子中可以看到Ubuntu:16.04和latest擁有相同的ID,因爲它們對應的是同一個鏡像。
3. 刪除本地鏡像
要刪除本地鏡像,可以使用 docker image rm 命令,其格式:
docker image rm [選項] <鏡像1> [<鏡像2> ...]
注意:用ID、鏡像名、摘要刪除鏡像
其中,<鏡像>可以是鏡像短ID、鏡像長ID、鏡像名 或者 鏡像摘要
eg: dicker image rm redis
容器
1.啓動容器
1. 1 新建並啓動
所需要的命令主要爲 docker run
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
COMMAND:容器啓動後進入容器中要執行的命令
OPTIONS(常用參數)
-d : 讓 Docker在後臺運行而不是直接把執行命令的結果輸出在當前宿主機下
-t : 選項讓 Docker分配一個僞終端( pseudo-tty)並綁定到容器的標準輸入上,
-i : 則讓容器的標準輸入保持打開。
--name : 爲容器命名
-v : 創建數據卷
-p : 綁定端口
docker 運行語法:docker run -p 本地端口:容器端口 鏡像
後臺運行語法:docker run -d 鏡像
[root@docker docker]# docker run ubuntu /bin/echo 'Hello world'
Hello world
當利用 docker run
來創建容器時,Docker 在後臺運行的標準操作包括:
- 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
- 利用鏡像創建並啓動一個容器
- 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層
- 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
- 從地址池配置一個 ip 地址給容器
- 執行用戶指定的應用程序
- 執行完畢後容器被終止
1.2. 啓動已終止容器
可以利用 docker start
命令,直接將一個已經終止的容器啓動運行。
docker start CONTAINER [CONTAINER...]
2. 查看容器
docker ps ##查看啓動的容器
docker ps -a ##查看所有容器
3. 守護態運行
需要讓 Docker 容器在後臺以守護態(Daemonized)形式運行。此時,可以通過添加 -d
參數來實現。
[root@docker ~]# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
38d95518d4fb650d3fad5f5a94553963c05c033efa2bc5e50f33f4a0cc9570a2
[root@docker ~]#
容器啓動後會返回一個唯一的 id,也可以通過 docker ps
命令來查看容器信息。
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38d95518d4fb ubuntu "/bin/sh -c 'while t…" About a minute ago Up About a minute practical_leakey
[root@docker ~]#
可以通過 docker logs
命令獲取容器的輸出信息。
4. 終止容器
使用 docker stop
來終止一個運行中的容器
docker stop CONTAINER [CONTAINER...]
5.重啓容器
docker restart CONTAINER [CONTAINER...]
6.刪除容器
docker rm CONTAINER [CONTAINER...]
7.獲取容器的輸出信息
docker logs CONTAINER [CONTAINER...]
8.進入容器
docker exec -i -t CONTAINER /bin/bash
eg: docker exec -i -t web
9.主機和容器間拷貝
容器拷貝到主機
docker cp 容器id:/opt/webapp/app.py d:/www
/opt/webapp/app.py : 容器中的文件
d:/www : 主機文件夾
主機拷貝到容器
docker cp d:/www/文件 容器id:/opt/webapp/
10.刪除容器
docker rm CONTAINER [CONTAINER...]
數據卷
1.什麼是數據卷
數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過UFS,可以提供很多有用的特性
1.數據卷可以在容器之間共享和重用
2.對數據卷的修改會立馬生效
3.對數據卷的更新,不會影響鏡像
4.數據卷默認會一直存在,即使容器被刪除
注意:數據卷的使用,類似於 Linux下對目錄或文件進行mount,鏡像中的被指定爲掛
載點的目錄中的文件會隱藏掉,能顯示看的是掛載的數據卷。
2.爲什麼要使用數據卷
將本地主機中的代碼運行在 docker容器中
3.掛載數據卷的前提
授權本地磁盤
4. 掛載一個主機目錄作爲數據卷
語法:
docker run -v 本地目錄:容器目錄
docker run -d -P --name web -v d:/www/webapp:/opt/webapp training/webapp python app.py
Docker 搭建PHP開發環境
1. 下載阿里雲的lamp鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/itsource/centos-lamp:[鏡像版本號]
鏡像版本號就是tag的值
2. 創建lamp容器並運行
docker run -itd -p 80:80 -p 3306:3306 --name lamp --privileged=true -v d:/www/xxx:/data/webroot/default ec258725b54b /usr/sbin/init
其中:
--name lamp 爲容器起名爲lamp
--privileged=true和 /usr/sbin/init 讓container內的root擁有真正的root權限