Ctrl + P + Q 回到宿主機 shell,容器 detach 狀態
建立一個容器,讓其中運行bash應用: sudo docker run -t -i ubuntu:12.04 /bin/bash
列出鏡像:docker images / image Id 唯一標識一個鏡像
建立並運行鏡像:docker run -t(分配一個偽tty) -i(互動模式) ubuntu:12.04 /bin/bash
ubuntu 是倉庫名
12.04是TAG
$ sudo docker run -t -i -c 100 -m 512MB -h test1 -d --name="docker_test1" ubuntu /bin/bash建立一個 cpu 優先順序為 100,記憶體限制 512MB,主機名稱為 test1,名為 docker_test1 後台運行 bash 的容器指定網路模式: -net=host/container:NAME_OR_ID/none/bridge host : 使用和宿主機一樣的ip和連接埠(容器不會虛擬自己的網卡以及配置自己的ip) container : 新建立的容器和已經存在的一個容器共用一個ip和連接埠,自己不配置,而不是共用宿主機的 none : docker容器自己擁有網路,並不會為其配置,需要自己手動添加網卡,配置ip等 bridge : docker預設的網路設定,docker容器以docker0為虛擬橋接器或者叫路由,所有的docker容器都串連到這個docker0上,由docker0來做路由,由docker0橋接器來分配ip 列出主機橋接器:yum -y install bridge-utils / brctl show 使用特定範圍的IP:需要安裝 bridge-utils 確保: 1. docker 進程是停止的: service docker stop / systemctl stop docker 關閉並卸載掉docker0橋接器(你也可以不用卸載) ip link set dev docker0 down brctl delbr docker0 2. 建立自訂橋接器: $ brctl addbr bridge0 $ ip addr add 192.168.5.1/24 dev bridge0 $ ip link set dev bridge0 up //ip addr show bridge0 查看 3. 修改docker檔案把自己建立的橋接器指定上去 $ cat /etc/sysconfig/docker | grep 'OPTIONS=' OPTIONS=--selinux-enabled -b=bridge0 -H fd:// 4.注意 如果刪除了預設的 docker0 橋接,把 docker 預設橋接指定到了 bridge0,則最好在建立容器的時候加上 --net=none,防止自動分配的 IP 在區域網路中有衝突
不同主機間容器通訊:
藉助: pipework
git clone https://github.com/jpetazzo/pipework.git
$ sudo cp -rp pipework/pipework /usr/local/bin/
pipework br0 -i eth0 a46657528059 192.168.115.10/24@192.168.115.2 # 預設不指定網卡裝置名稱,則預設添加為 eth1 # 另外 pipework 不能添加靜態路由,如果有需求則可以在 run 的時候加上 --privileged=true 許可權在容器中手動添加, # 但這種安全性有缺陷,可以通過 ip netns 操作 使用 ip netns 添加靜態路由,避免建立容器使用 --privileged=true 選項造成一些不必要的安全問題 $ docker inspect --format="{{ .State.Pid }}" a46657528059 # 擷取指定容器 pid 6350 $ sudo ln -s /proc/6350/ns/net /var/run/netns/6350 $ sudo ip netns exec 6350 ip route add 192.168.0.0/16 dev eth0 via 192.168.115.2 $ sudo ip netns exec 6350 ip route # 添加成功
進入鏡像:
方式1:docker attach con_name 將終端附著到正在啟動並執行容器名為con_name的容器的終端上面去,前提是建立該容器時指定了相應的sh
方式2:docker exec -ti jiedai-op /bin/bash
開啟/關閉/殺掉鏡像:
docker start CONTAINER
stop / -t 可執行逾時時間
kill / kill -s 訊號類型
restart / -t 可執行逾時時間
pause
unpause
rm
commit 提交指定容器為鏡像
inpect
logs 輸出指定容器日誌資訊 -f(類似 tail -f)
create 建立容器而不啟動 建立:docker create -t -i centos /bin/bash 運行:docker start -a -i 容器ID
搜尋鏡像: docker search centos/ubuntu(預設下載所有)
docker 資訊: docker info
鏡像資訊: docker ps(查詢啟動的容器) / docker ps -a (查看所有容器) / docker ps -as (查看所有容器並顯示大小)
拉取鏡像: docker pull centos/ubuntu
docker pull ubuntu:14.04 下載執行版本ubuntu官方鏡像
相當於:sudo docker pull registry.hub.docker.com/ubuntu:12.04
可以還其他源: sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
推送鏡像: docker push 192.168.0.100:5000/ubuntu(ubuntu:14.04)
刪除鏡像: docker rmi -f(強制) docker.io/ubuntu
刪除容器: docker rm python_test
連接埠映射: docker run -t -P –expose 22 –name server ubuntu:14.04 (-P使用時需要指定 –expose選項,指定需要對外提供服務的連接埠)
綁定連接埠到指定介面:sudo docker run -p 127.0.0.1:80:8080 <image> <cmd> 127.0.0.1 是主機ip,80主機連接埠,8080容器連接埠 sudo docker run -p 127.0.0.1::8080 <image> <cmd> sudo docker run -p 80:8080 <image> <cmd> sudo docker run -p 8080 <image> <cmd>綁定UDP連接埠: sudo docker run -p 127.0.0.1:53:5353/udp <image> <cmd>
DOCKERFILE :(待補充)
--privileged
容器資料管理:
1. 資料卷
2. 資料卷容器
sudo docker run --rm --name test -v /source/:/test:ro -t -i ubuntu:14.04 /bin/bash 把宿主機/source目錄掛載在容器的/test下,唯讀方式 --rm 選項: 表示如果test容器有,則刪除test重新建立 注意: /source/ 不能放在宿主機的/root目錄下,建議放在/home/目錄下。
連結容器:
使用 –link
sudodockerrun−d–namedbtraining/postgres sudo docker run -d –name db training/postgres sudo docker run -d -P –name web –link db:db training/webapp python app.py
–link :alias 選項指定連結到的容器。
目的:不用容器向外公開任何連接埠給外部容器,例如:web伺服器和資料庫伺服器之間做連結
不同主機間容器通訊:
往 hub.docker.com 上傳鏡像:
1. 查看要上傳的鏡像: (自己下載的centos鏡像,建立了一個叫centos_test的容器,在root下面建立了一個叫text.txt的檔案) (提交鏡像的時候格式為: docker commit -m "touch a txt on it" -a "xz295139210(作者)" 798adb1953e1 docker.io/xz295139210/centos:v1) 這裡的xz295139210就是自己的hub.docker.com的賬戶 798adb1953e1 --> 這個是 docker ps - a 查出來的 centos_test 容器的CONTAINER ID [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xz295139210/python v1 6cd5799caed0 8 seconds ago 687.3 MB 2. docker login --> 驗證帳號和密碼 3.上傳:docker push docker.io/xz295139210/centos:v1 xz295139210/centos:v1 --> 通過 docker images 查出來。
從自己的 hub.docker.com 上下載鏡像:
1. docker login
2. docker pull xz295139210/python:v2
搜尋鏡像:
[root@localhost ~]# docker search python
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/python Python is an interpreted, interactive, obj… 1621 [OK]
docker.io docker.io/kaggle/python Docker image for Python scripts run on Kaggle 53 [OK]
命名格式:docker.io/kaggle/python --> kaggle就為docker鏡像源的一個使用者
宿主機上對容器執行操作:
docker exec 可以用來在容器中運行一個進程
docker exec e307f916494c touch /root/hehe.txt
給鏡像打標籤:
docker tag d1e32b95d8e8 192.168.2.67:5000/test
192.168.2.67:5000 –> 相當於官方倉庫的 docker.io / 也就是要上傳的地址
test –> 就是你的鏡像名
tag 不同於 commit : tag是在源中鏡像打一個tag commit是把容器提交成為一個鏡像
建立私人倉庫上傳鏡像:
錯誤1:
[root@localhost ~]# docker push 192.168.2.67:5000/test
The push refers to a repository [192.168.2.67:5000/test]
Get https://192.168.2.67:5000/v1/_ping: http: server gave HTTP response to HTTPS client
解決1:1.cat /etc/docker/daemon.json { "live-restore": true, "insecure-registries" : ["192.168.2.67:5000"] }2. 重啟docker
容器存取控制:
1. 容器想訪問外部網路
1.1 sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
1.2 也可以在啟動docker時,設定–ip-forward=true, docker就會自動設定系統ip_forward參數為1
sudo docker # docker 命令協助
Commands:
attach Attach to a running container # 當前 shell 下 attach 串連指定運行鏡像
build Build an image from a Dockerfile # 通過 Dockerfile 定製鏡像
commit Create a new image from a container’s changes # 提交當前容器為新的鏡像
cp Copy files/folders from the containers filesystem to the host path
# 從容器中拷貝指定檔案或者目錄到宿主機中
create Create a new container # 建立一個新的容器,同 run,但不啟動容器
diff Inspect changes on a container’s filesystem # 查看 docker 容器變化
events Get real time events from the server # 從 docker 服務擷取容器即時事件
exec Run a command in an existing container # 在已存在的容器上運行命令
export Stream the contents of a container as a tar archive
# 匯出容器的內容流作為一個 tar 歸檔檔案[對應 import ]
history Show the history of an image # 展示一個鏡像形成曆史
images List images # 列出系統當前鏡像
import Create a new filesystem image from the contents of a tarball
# 從tar包中的內容建立一個新的檔案系統映像[對應 export]
info Display system-wide information # 顯示系統相關資訊
inspect Return low-level information on a container # 查看容器詳細資料
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 從一個 tar 包中載入一個鏡像[對應 save]
login Register or Login to the docker registry server
# 註冊或者登陸一個 docker 原始伺服器
docker login –username= –email=
logout Log out from a Docker registry server # 從當前 Docker registry 退出logs Fetch the logs of a container # 輸出當前容器日誌資訊port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射連接埠對應的容器內部源連接埠pause Pause all processes within a container # 暫停容器ps List containers # 列出容器列表pull Pull an image or a repository from the docker registry server # 從docker鏡像原始伺服器拉取指定鏡像或者庫鏡像push Push an image or a repository to the docker registry server # 推送指定鏡像或者庫鏡像至docker原始伺服器restart Restart a running container # 重啟啟動並執行容器rm Remove one or more containers # 移除一個或者多個容器rmi Remove one or more images # 移除一個或多個鏡像[無容器使用該鏡像才可刪除,否則需刪除相關容器才可繼續或 -f 強制移除]run Run a command in a new container # 建立一個新的容器並運行一個命令save Save an image to a tar archive # 儲存一個鏡像為一個 tar 包[對應 load]search Search for an image on the Docker Hub # 在 docker hub 中搜尋鏡像start Start a stopped containers # 啟動容器stop Stop a running containers # 停止容器tag Tag an image into a repository # 給源中鏡像打標籤top Lookup the running processes of a container # 查看容器中啟動並執行進程資訊unpause Unpause a paused container # 取消暫停容器version Show the docker version information # 查看 docker 版本號碼wait Block until a container stops, then print its exit code # 截取容器停止時的退出狀態值
Run ‘docker COMMAND –help’ for more information on a command.