docker常用命令

1. docker 常用命令

1.1 啓動停止

systemctl start docker 	# 啓動docker服務
systemctl stop docker 	# 關閉docker服務
systemctl enable docker # 設置開機自啓動
docker version 			# 查看docker 版本

1.2 配置aliyun容器鏡像加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1fc43mcq.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

1.3 鏡像操作

命令 說明
docker search 關鍵字 在鏡像倉庫中搜索包含關鍵字的鏡像
docker pull 鏡像名稱:tag tag爲鏡像版本,如果不指定,默認爲latest
docker images 查看本地鏡像
docker inspect 鏡像id or 鏡像名稱 查看鏡像詳細信息
docker rmi -f 鏡像id or 鏡像名:tag -f 爲強制刪除

搜索鏡像
docker search
拉取鏡像
docker pull
查看本地鏡像
docker images
查看鏡像底層信息
docker inspect
docker inspect

1.4 容器相關

命令 說明
docker run --name 容器名稱 -i -t -d -p 宿主機端口:容器端口 -v 宿主機目錄:容器目錄:ro 鏡像id or 鏡像名:tag 創建鏡像 , --name:指定容器名稱,-i:交互模式訪問 -t:分配一個僞終端,-p:端口映射,-v:目錄映射 ro爲只讀,默認爲讀寫
docker ps -a -q -a:表示 查看所有容器,默認顯示正在運行的容器,-q:只顯示容器id
docker stop 容器id或容器名稱 停止容器
docker start 容器id或容器名稱 啓動容器
docker rm -f 容器id或容器名稱 刪除容器 -f 表示強制刪除
docker logs 容器id或容器名稱 查看容器日誌
docker inspect 容器id或容器名稱 查看容器詳細信息
docker exec -it 容器id或容器名 bash 以交互式進入容器
docker cp 宿主機目錄 容器id:容器目錄 拷貝宿主機文件到容器內
docker cp 容器id:容器目錄 宿主機目錄 拷貝容器文件到宿主機

創建鏡像

docker run --name conner_centos -i -t -d -p 1234:2234 -v /tmp:/tmp:ro 688353a31fde

在這裏插入圖片描述
拷貝宿主機文件到容器

docker cp lbz 1b8ecd002608:/root

docker cp
拷貝容器文件到宿主機

docker cp 1b8ecd002608:/root/lbz/connor /tmp

docker cp
清除所有容器

# 方法一
for i in `docker ps -a|awk '{print $1}'|grep -v CONTAINER`; do docker rm -f $i; done;
# 方法二
docker rm -f $(docker ps -aq)

2. 構建鏡像

2.1 修改容器,通過容器構建鏡像

根據基礎鏡像創建容器
docker run -it -d
修改容器
docker exec
提交新鏡像

# docker commit -m='描述信息' -a='作者' 容器id或容器名稱 鏡像名:tag
docker commit -m='test2020' -a='connor' 2d96a1f2d3e8 centos7:v1.0

docker commit
docker run -it -d

2.2 編寫dockerfile構建鏡像

語法規則

  • 指令必須大寫,且後面必須跟參數
  • 第一條指令必須爲FROM,指定Base Image(基礎鏡像)
  • 指令順序按從上到下依次執行
  • 每條指令都會創建一個新的鏡像層並提交

2.2.1 dockerfile常用參數

參數 說明
FROM 指定Base Image
MAINTAINER 指定作者
ENV 設置環境變量
WORKDIR 指定默認工作目錄,即進入容器後默認進入的目錄
VOLUME 創建容器內部掛載點
RUN 指定構建過程中需要執行的命令
CMD 指定容器運行時需要執行的命令,有多條命令時只有最後一條生效
ENTRYPOINT 指定容器運行時需要執行的命令
COPY 拷貝文件或目錄到鏡像中
ADD 拷貝文件到鏡像中
EXPOSE 指定容器暴露端口

2.2.2 構建鏡像

創建dockerfile

# 指定基礎鏡像
FROM accab2322a74
# 指定作者
MAINTAINER connor
# 添加環境變量
ENV test_path /usr/local/ansible
# 構建過程中執行命令
RUN mkdir -p ${test_path}
# 拷貝文件或目錄
COPY a.txt ${test_path}
# 拷貝文件
ADD 1.txt ${test_path}
# 指定默認工作目錄
WORKDIR ${test_path}
# 添加默認掛載點,在docker run 時如果不指定-v 則默認掛載到隨機目錄
VOLUME ["/data1","/data2"]
# 啓動容器時運行,如果docker run後面添加了參數則會在ENTRYPOINT參數中追加
ENTRYPOINT ["tail"]
# 啓動容器時運行,默認追加命令(參數),如果有多個CMD命令,只執行(添加)最後一條命令(參數),如果docker run後面添加了參數則會將 CMD中的參數覆蓋
CMD ["-f", "/usr/local/ansible/1.txt"]
# 聲明瞭容器應該打開的端口並沒有實際上將它打開,在不使用-p(指定宿主機端口映射)和-P(宿主機隨機端口映射)時該端口並不會打開
# 作用1:爲了讓運維人員知曉,需要映射哪些端口 作用2:使用隨機端口映射時,容器默認使用EXPOSE暴露端口
EXPOSE 8080

根據dockerfile構建新的鏡像

# docker build -f dockerfile文件名 -t 鏡像:標籤 .(注意這裏還有個點)
docker build -f test_dockerfile -t centos7:v1.7 .

docker build -f test_dockerfile -t centos7:v1.7 .
運行容器

# -P 指定隨機端口映射,[-f /usr/local/ansible/a.txt] 爲啓動參數,默認會將dockerfile中的CMD參數覆蓋,但不會覆蓋ENTRYPOINT,會與ENTRYPOINT參數組合成新的命令,當沒有ENTRYPOINT時,則爲獨立運行的命令
docker run  -it -d  -P centos7:v1.7 -f /usr/local/ansible/a.txt

此處可以看到容器端口8080已經對外開放
docker run
此處可以看到dockerfile 的CMD的值已經被替換

docker inspect -f {{".Config.Cmd"}} eab086bf2f8c

docker inspect
此處可以查看容器掛載宿主機的具體目錄

docker inspect -f {{".Mounts"}} eab086bf2f8c

docker inspect
此處可以驗證得出容器掛載宿主機成功
在這裏插入圖片描述

3. 其他問題

3.1 docker -v 掛載宿主機目錄沒有權限訪問

兩種方法選擇一種即可

3.1.1 關閉selinux

# 修改配置文件需要重啓服務器才能生效,所以修改配置後還需要使用命令臨時修改
sed  -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0

3.1.2 給需要掛載的宿主機目錄配置安全上下文(selinux 標籤)

# /data爲宿主機提供掛載的目錄
chcon -Rt svirt_sandbox_file_t /data/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章