目录
- 启动 Docker
- 获取 Image 文件
- 管理 Image 文件
- 创建 Container
- 连接 Container
- 操作 Container
- 创建 Volume
- 添加 Docker 用户组
- 快捷键
- 其它
1. 启动 Docker
$ docker version(或 info) ## 查看 Docker 版本信息
$ systemctl start docker ## 启动 Docker
$ systemctl restart docker ## 重启 Docker (修改防火墙,开放相应端口后,需要重启 Docker)
2. 获取 Image 文件
$ docker search --filter=starts=50 nginx ## 搜索镜像 Nginx 标星至少为 50
$ docker pull nginx:latest ## 获取最新版 nginx(最新版一般不稳定)
$ docker pull index.tenxcloud.com/docker_library/node:latest ## 使用时速云镜像下载
$ docker tag index.tenxcloud.com/docker_library/node:latest node:latest ## 更新镜像标签与官方标签保持一致
3. 管理 Image 文件
$ docker images ## 查看本地 image 文件
$ docker image ls ## 查看本地 image 文件
$ docker image rm [imageName] ## 删除 image 文件
$ docker rmi [imageName] ## 删除 image 文件(同上)
$ docker image prune -f ## 强制删除遗留的临时镜像,及一些没有被使用过的镜像
$ docker save -o ubt_18.04.tar ubt:18.04 ## 导出本地的 ubt:18.04 镜像为 ubt_18.04.tar
$ docker load -i ubt_18.04.tar ## 导入镜像文件
$ docker tag test:latest user/test:latest ## 添加新标签 user/test:latest
$ docker push user/test:latest ## 上传镜像到 Docker Hub 官方仓库(需要登录)
4. 创建 Container
$ docker run --name nginx-test -p 8080:80 -d -it nginx:latest /bin/bash
## --name 容器名称为 nginx-test
## -p 8080:80 本地 8080 端口映射到容器的 80 端口(若不指定则随机分配)
## -d nginx 设置容器在后台一直运行
## -rm 关闭容器后自动删除容器
## -t 分配一个伪终端绑定到容器的标准输入上
## -i 使容器的标准输入保持打开
## -v /home/usr/bob:/data 在容器中设置挂载点 /data(容器中一个目录), 并与主机目录 /home/usr/bob 关联;
5. 连接 Container
$ docker run --name web -d -p 80:80 --link db:db nginx
## --link <容器名称>:<别名>
## 从容器内部连接另一个容器:mongodb://db:27017/example
$ docker port mysql ## 查看容器 mysql 端口映射情况
6. 操作 Container
Container 启动、停止:
$ docker start [containerID] ## 启动已经生成、停止运行的容器(可以仅使用部分 ID)
$ docker stop [containerID] ## 终止容器运行(自行收尾清理工作)
$ docker pause [containerID] ## 暂停容器中所有进程
$ docker unpause [containerID] ## 恢复容器中所有进程
$ docker kill [containID] ## 手动终止不会自动终止的容器
$ docker rm [containerID] ## 删除容器文件(终止运行的容器文件,依然会占据硬盘空间,可以将其删除)
$ docker rm -l [containerID] ## 删除容器的连接,但保留容器
$ docker rm -v [containerID] ## 删除容器挂载的数据卷
Container 进入:
$ docker attach [containerID] ## 进入一个正在运行的容器
$ docker exec -it [containerID] /bin/bash (推荐) ## 进入一个正在运行的容器(run 时未使用 -it 参数)
$ docker exec -it node-test env LANG=C.UTF-8 /bin/bash ## 添加中文支持 env LANG=C.UTF-8
$ docker exec hello echo "Hello World" ## 在容器外运行 hello 容器内的命令(常用于执行 apt-get、yum 安装包或运行各种守护进程)
Container 信息查看:
$ docker ps ## 查看正在运行的容器
$ docker ps -a -s ## 查看所有容器 -a 总文件大小 -s
$ docker inspect test ## 查看容器详情
$ docker logs [op][containerID] ## 查看容器的输出(run 时未使用 -it 参数)
$ docker top test ## 查看容器中的进程信息
$ docker stats test ## 查看容器中的统计信息(CPU、内存、存储、网络等使用情况)
$ docker port mysql ## 查看容器 mysql 端口映射情况
Container 导出和导入:
容器快照与镜像的区别:容器快照将丢弃所有历史记录和元数据信息,镜像文件保存完整记录,体积更大。
$ docker expot -o mysql-`date +%Y%m%d`.tar a404c6c174a2 ## 将 id 为 a404c6c174a2 的容器按日期保存为 tar 文件。
$ docker import test_for_run.tar - test/ubuntu:v1.0 ## 将 test_for_run.tar 文件导入到系统中
Container 其他命令:
$ docker cp [containID]:[/path/to/file] . ## 从正在运行的容器中,拷贝文件到本机 . 为当前目录
$ docker cp data test:/tmp/ ## 将本地路径的 data 复制到 test 容器的 /tmp/ 路径下
7. 创建 Volume
Volume 创建
$ docker volume create -d local test ## 普通数据卷,映射到主机 /var/lib/docker/volumes 路径下
Volume 绑定(推荐)
使用 training/webapp 镜像创建一个 Web 容器,并创建一个数据卷挂载到容器的 /opt/webapp 目录:
注意:本地路径必须使用绝对路径,容器内路径可以为相对路径。
$ docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
8. 添加 Docker 用户组
## 使当前用户也可以使用 Docker
$ sudo groupadd docker ## 添加 docker 用户组
$ sudo gpasswd -a $USER docker ## 将登陆用户加入到 docker 用户组中
$ newgrp docker ## 更新用户组
$ docker ps ## 测试 docker 命令是否可以使用 sudo 正常使用
9. 快捷键
Ctrl + c ## 停止当前进程
Ctrl + d exit ## 退出容器
Ctrl + p Ctrl + q ## 退出容器但不终止
10. 其它
## docker 中不带 vim 命令,需要安装:
$ apt-get update ## 同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中的源索引
$ apt-get install vim ## 安装 vim