Docker基本命令即操作


      Docker:是對應用的虛擬化,共享了底層宿主機的操作系統內核,是一種標准的應用程序打包、部署方式

      虛擬機技術:對整個操作系統的虛擬化,用於模擬完整的操作系統

 

      Docker在centos上的安裝,Ubuntu上的安裝可以參考Docker官網給的安裝教程

sudo yum install –y docker-io

      啟動docker

sudo systemctl start docker

      搜索docker鏡像

sudo docker search centos

      獲取鏡像

 sudo docker pull centos

      查看鏡像

sudo docker images

      刪除鏡像 

sudo docker rmi <鏡像名稱>

 

      啟動容器

sudo docker run --name –h hostname

      列如啟動一個‘Hello world’鏡像為centos的docker容器

sudo docker run centos /bin/echo ‘Hello world’

      啟動自定義名稱的docker容器,並進入到容器里面

sudo docker run --name mydocker -it centos /bin/bash

      啟動已經創建好的docker容器

sudo docker start <容器ID>

      啟動docker容器,並讓其在后台運行

sudo docker run -d --name mynginx nginx

 

      交互型容器:運行在前台,通常會指定有交互的控制台,可以給容器輸入,也可以得到容器的輸出

sudo docker run -it --name <容器名稱> <鏡像> /bin/bash

      守護型容器:運行在后台,創建啟動之后就與終端無關

sudo docker run -d --name <容器名稱> <鏡像> /bin/bash

      獲取容器PID

sudo docker inspect --format “{{.State.Pid}}” <容器ID/容器名稱>

      進去正在運行的容器,其中pid、net、ipc、mount、uts分別表示容器的進程、網絡、消息、文件系統和主機名

sudo nsenter --target <容器PID> --mount --uts --ipc --net --pid

      停止容器

sudo docker stop CONTAINER ID

 

      查看當前正在運行的容器

sudo docker ps

      查看所有容器,包括運行和停止的

 sudo docker ps -a

      查看最新創建的容器

sudo docker ps -l

      查看最后創建的x個容器

sudo docker ps -n=x

      刪除容器

sudo rm CONTAINER ID

 

      Docker沒有提供一次性刪除所有容器的命令,但是可以用下面的命令來實現這個目的

sudo docker rm ‘docker ps -a -q’

      這個命令會用docker ps列出當前的所有容器,-a標志列出所有容器,-q標志只列出容器的ID,不包括容器的其他信息。然后將這個列表傳給docker rm命令,依次刪除容器

 

      編寫進入容器腳本in.sh

vim in.sh
#!/bin/bash
CNAME=$1
CPID=$(sudo docker inspect --format "{{.Status.Pid}}" $CNAME)
sudo nsenter --target "$CPID" --mount --uts --ipc --net --pid

      賦予腳本可執行權限

sudo chmod u+x in.sh

      進入容器只需 ./in.sh <主機名>

 

      查看網橋情況,可以看出網絡中是有docker的網橋的

 brctl show

 

      查看防火牆規則,同樣網絡中含有docker的防火牆規則

sudo iptables -L

 

      隨機映射

sudo docker run -P
sudo docker run -d -P --name mynginx1 nginx

      指定映射

sudo docker run -p hostPort:containerPort
sudo docker run -p ip:hostPort:containerPort
sudo docker run -p ip::containerPort
sudo docker run -d -p 91:80 --name mynginx2 nginx

 

      通過nginx在容器中部署靜態網站

sudo docker run -it -p 80 --name web ubuntu /bin/bash 
root@425c7a0e6949:/# apt-get update
root@425c7a0e6949:/# apt-get install nginx
root@425c7a0e6949:/# apt-get install vim
root@425c7a0e6949:/# mkdir -p /var/www/html
root@425c7a0e6949:/# cd /var/www/html/
root@425c7a0e6949:/var/www/html# vim index.html
root@425c7a0e6949:/var/www/html# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@425c7a0e6949:/var/www/html# ls /etc/nginx/
root@425c7a0e6949:/var/www/html# ls /etc/nginx/sites-enabled/
root@425c7a0e6949:/var/www/html# vim /etc/nginx/sites-enabled/default(將root后的目錄改為自己創建的靜態網站的目錄)
root@425c7a0e6949:/var/www/html# cd
root@425c7a0e6949:~# nginx
root@425c7a0e6949:~# ps -ef

      在宿主機查看正在運行的容器,可以看到容器映射的端口信息

sudo docker ps

      也可以直接查看容器映射的端口號和容器內進程

sudo docker port web
sudo docker top web

      可以在通過宿主機本地IP加上端口號查看所創建的網頁,也可以直接通過容器IP查看,當然也可以在瀏覽器里面直接輸入IP地址

curl http://127.0.0.1:<端口號>
curl http://172.17.0.2

 

      使用commit構建鏡像

sudo docker commit <容器名稱/容器ID> <鏡像名稱>

 

      使用Dockerfile構建鏡像

mkdir -p dockerfile/df_test1
cd dockerfile/df_test1
vim dockerfile
#First dockerfile for test
FROM ubuntu
MAINTAINER(維護人信息)
RUN apt-get update
RUN apt-get install nginx
EXPOSE 80
sudo docker build -t=<鏡像名稱> 

 

      Dockerfile的指令

# 后面跟着注釋的內容

INSTRUCTION argument <指令以大寫的指令名開頭,后面跟指令的參數>

FROM <鏡像名> (已經存在的鏡像,也成為基礎鏡像,必須是Dockerfile中第一條非注釋指令)

MAINTAINER <name> (指定鏡像的作者信息,包含鏡像的所有者和聯系信息)

RUN <command>

EXPOSE <port> (指定該鏡像運行的容器使用的端口)

 

      Dockerfile構建過程

從基礎鏡像運行一個容器

執行一條指令,對容器作出修改

執行類似docker commit的操作,提交一個新的鏡像層

再基於剛提交的鏡像運行一個新的容器

執行Dockerfile中的下一條指令,直至所有指令執行完畢

 

      commit構建鏡像實例

對鏡像進行升級
root@e8730dd51d57:/# apt-get update

安裝網絡工具
root@e8730dd51d57:/# apt-get install net-tools

安裝Ping工具
root@e8730dd51d57:/# apt-get install iputils-ping

sudo docker commit <容器ID> 名字/鏡像

      再用sudo docker images去查看可以發現多處了鏡像 

 

      在另外一個終端中進入已經運行的容器

sudo docker attach <容器ID>
sudo docker exec -it <容器ID> /bin/bash

 

      利用docker logs命令來查看容器日志,其中-f標志可以查看實時日志,-t標志可以日志產生的時間,也可以用--tail標志來指定查看日志的最后部分

sudo docker run -d --name logs ubuntu /bin/sh -c "while true;do echo Hello world;sleep 1;done"
sudo docker logs -t logs
sudo docker logs -f logs
sudo docker logs -t -f --tail=0 logs

 

      查看容器內進程

sudo docker top <容器名稱>

      查看docker守護進程

sudo ps -ef | grep docker

      啟動停止docker守護進程

sudo service docker start
sudo service docker stop
sudo service docker restart

 

      修改docker0默認分配的ip地址

sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0 
sudo service docker restart

      添加虛擬網橋

sudo ovs-vsctl add-br br0
sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0

      更改docker守護進程的啟動配置:

/etc/default/docker中添加DOCKER_OPTS值  -b=br0

 

      拒絕所有容器間互聯

/etc/default/docker中添加DOCKER_OPTS值  --icc=false,然后再用重啟docker守護進程

sudo vim /ect/default/docker
DOCKER_OPTS=”--icc=false”
sudo service docker restart

      允許特定容器間的連接

Docker守護進程的啟動選項

--icc=false --iptables=true

--link 在容器啟動時添加link

docker利用iptables中的機制,在icc=false時,阻斷所有的docker容器間的訪問,僅僅運行利用link選項配置的容器進行相互的訪問

 

      查看docker網絡

sudo docker network ls
sudo docker network inspect <網絡類型>

      建立自己的網絡

sudo docker network create --driver bridge mynet

      讓容器運行在自己創建的網絡中

sudo docker run -it --network=mynet --name <容器名稱> <鏡像>

 

 

      數據卷是經過特殊設計的目錄,可以繞過聯合文件系統,為一個或多個容器提供訪問

      數據卷的設計目的,在於數據的永久化,它完全獨立於容器的生成周期,因此,docker不會在容器刪除時刪除其掛載的數據卷,也不會存在類似的垃圾手機機制,對容器引用的數據卷進行處理

 

      數據卷的特點

    (1)數據卷在容器啟動時初始化,如果容器使用的鏡像在掛載點包含了數據,這些數據會拷貝到新初始化的數據卷中

    (2)數據卷可以在容器之間共享和重用

    (3)可以對數據卷里的內容直接進行修改

    (4)數據卷的變化不會影響鏡像的更新

    (5)卷會一直存在,即使掛載數據卷的容器已經被刪除

 

      為容器添加數據卷

      在用docker run命令的時候,使用-v標記來添加一個數據卷。在一次run中多次使用可以掛載多個數據卷,下面加載一個卷到web容器上

sudo docker run -it --name web -v /web ubuntu /bin/bash

      web是容器中的目錄,目錄不存在會重新創建

 

      掛載一個主機目錄作為數據卷

sudo docker run -it --name web -v /opt/web:/web ubuntu /bin/bash

      為數據卷添加訪問權限為只讀

sudo docker run -it --name web -v /opt/web:/web:ro ubuntu /bin/bash

      掛載一個宿主主機文件作為數據卷

sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

      創建一個容器數據卷

sudo docker run -itd -v /logdata --name logdata ubuntu

      在其他容器中掛載logdata容器的數據卷

sudo docker run -itd --name web1 --volumes-from logdata ubuntu
udo docker run -itd --name web2 --volumes-from logdata ubuntu

 

      備份

sudo docker run --volumes-from logdata -v /containet_backup:/backup ubuntu tar cvf /backup/backup.tar /data

 

      恢復

      先創建一個數據卷

sudo docker run -v /data --name logdata2 ubuntu

      再將備份文件恢復到這個數據卷容器

sudo docker run --volumes-from logdata2 -v /container_backup:/backup ubuntu tar xvf /backup/backup.tar

      最后啟動一個容器掛載驗證/data目錄數據恢復成功

sudo docker run -itd --volumes-from logdata2 --name web_recover ubuntu

 

      遷移容器和鏡像

      先創建測試容器

sudo docker exec web touch /opt/test.txt
 sudo docker exec web ls /opt

      執行導出

sudo docker export web > web.tar

      執行導入

cat web.tar | sudo docker import - web:v2

      啟動容器

sudo docker run -itd --name web_v2 web:v2 /bin/bash

      進入容器查看

 sudo docker exec web_v2 ls /opt

      導出

sudo docker save web > web.tar

      導入

 sudo docker load < web.tar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM