文章目錄
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 爲強制刪除 |
搜索鏡像
拉取鏡像
查看本地鏡像
查看鏡像底層信息
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 1b8ecd002608:/root/lbz/connor /tmp
清除所有容器
# 方法一
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 commit -m='描述信息' -a='作者' 容器id或容器名稱 鏡像名:tag
docker commit -m='test2020' -a='connor' 2d96a1f2d3e8 centos7:v1.0
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 .
運行容器
# -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已經對外開放
此處可以看到dockerfile 的CMD的值已經被替換
docker inspect -f {{".Config.Cmd"}} eab086bf2f8c
此處可以查看容器掛載宿主機的具體目錄
docker inspect -f {{".Mounts"}} eab086bf2f8c
此處可以驗證得出容器掛載宿主機成功
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/