1. Docker簡介
Docker 包括三個基本概念:
- 鏡像(Image): Docker 鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
- 容器(Container): 鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O計中的 類 和 實例 一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。
- 倉庫(Repository): 倉庫(Repository)類似Git的遠程倉庫,集中存放鏡像文件。

docker簡介.png
1.1 Docker安裝
基于阿里云安裝docker:https://developer.aliyun.com/article/110806
1.2 Docker 配置源
# 1. 修改配置文件 vim /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}
# 2. 重啟docker服務
sudo systemctl daemon-reload
sudo systemctl restart docker
# 3. 查看是否修改成功
sudo docker info
2. Docker常用命令
- 鏡像相關(guān)命令
docker images # 查看所有的鏡像
docker search xxx # 搜索命令
docker pull xxx[:tag] # 下載鏡像,tag表示版本號
docker rmi xxx # 刪除鏡像
- 容器命令
docker run [可選] imageid # 啟動容器
docker run -it xxx /bin/bash # 啟動并使用交互式方式運行
(1) -d # 后臺運行
(2) --name # 容器命名
(3) -p 3344:80 # 暴露端口
# --- 退出容器 ---
exit # 關(guān)閉并退出容器命令
ctrl + p + q # 推出不關(guān)閉容器
# --- 查看運行的容器 ---
docker ps # 列出當前正在運行的容器
docker ps -a # 查看曾今運行過的容器
docker rm xxx # 刪除容器
docker start xxx # 啟動曾今關(guān)閉的容器
docker restart xxx # 重啟容器
docker kill xxx # 強制停止容器
docker attach [容器ID] # 進入容器,當前打開的終端,不會啟動新的進程;
docker exec -it [容器ID] [command] # 在容器中執(zhí)行相關(guān)命令,進入容器開啟一個新的終端;
docker logs [容器ID] # 查看容器日志
docker top [容器ID] # 查看容器內(nèi)部的進程id
docker inspect [容器ID] # 查看docker信息
docker cp 容器id:容器路徑 主機路徑 # 從容器內(nèi)拷貝出來,推出容器進入主機執(zhí)行命令
docker stats # 查看容器cpu狀態(tài)
# --- 提交容器 ---
docker commit -a="作者" -m="xxx" 鏡像名:[鏡像版本號]

docker常用指令.png
3. Docker容器卷
# === 命令行方式 ===
docker run -it -v 主機目錄:容器目錄 鏡像名 執(zhí)行命令
# === 數(shù)據(jù)卷 ===
docker volume ls # 查看所有的卷
docker volume inspect 卷名 # 查看卷的詳細信息
4. Dockerfile
- 主要作用用來構(gòu)建docker鏡像;命令參數(shù)腳本。
- 構(gòu)建步驟:
(1)編寫dockerfile;
(2)docker build 構(gòu)建一個鏡像;docker build -f dockerfile文件名 -t 鏡像名:tag 生成路徑
(3)docker run 運行鏡像;
(4)docker push 發(fā)布鏡像(Docker Hub或者阿里云); - dockerfile常用指令
| 指令 | 含義 |
|---|---|
| FROM | 構(gòu)建新鏡像,基于哪個鏡像; |
| MAINTAINER | 鏡像維護者的姓名 + 郵箱; |
| RUN | 構(gòu)建鏡像時運行的shell命令; |
| ADD | 步驟:tomcat鏡像,添加tomcat壓縮包; |
| WORKDIR | 鏡像工作目錄; |
| VOLUME | 掛載目錄; |
| EPOSE | 聲明容器暴露的端口; |
| CMD | 指定容器啟動的時候需要運行的命令,只有最后一個生效,命令會被替換; |
| ENTRYPOINT | 指定容器運行的命令;可以追加命令。 |
| COPY | 將文件拷貝到鏡像中; |
| ENV | 構(gòu)建鏡像的時候設置環(huán)境變量; |

Dockerfile常用命令.png
4.1 Dockerfile例子
例子:https://github.com/komljen/dockerfile-examples

image.png
4.2 發(fā)布鏡像
- DockerHub發(fā)布鏡像流程:
(1)注冊dockerhub賬號;https://www.docker.com/products/docker-hub
(2)在服務器上提交自己的鏡像;
# 登錄dockerhub賬號:
docker login -u xxx -p xxx
# push鏡像
docker push 鏡像名:tag
4.3 Docker流程總結(jié)

Docker流程總結(jié).png
5. 基于docker搭建深度學習環(huán)境
- 基于docker + nvidia-docker + tensorflow 搭建深度學習環(huán)境;
1. 安裝docker
參考:https://developer.aliyun.com/article/110806
2. 安裝nvidia-docker(需要確保安裝了Nvidia驅(qū)動)
參考:https://github.com/NVIDIA/nvidia-docker
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
3. 安裝tensorflow
參考:https://www.tensorflow.org/install/docker?hl=zh-cn
運行tensorflow鏡像:sudo docker run --gpus all -v /home/czm/Public:/home/czm/Public -it zhiming/tensorflow:tf1.12-py3.5-cuda9.0 bash
參考文檔
- 狂神說Java】Docker最新超詳細版教程通俗易懂 https://www.bilibili.com/video/BV1og4y1q7M4/
- Docker官方主頁:https://www.docker.com/
- Docker命令參考文檔:https://docs.docker.com/engine/reference/commandline/cli/
(1)刪除none鏡像:http://www.itdecent.cn/p/d06830de219f - Docker Hub官方網(wǎng)站:https://hub.docker.com/
- Docker——配置國內(nèi)源 https://juejin.cn/post/6844904111582740493