Docker 速查表
docker-cheat-sheet
Docker 命令、帮助和提示
使用容器
图像命令
联网
图像标记并推送至 DOCKERHUB
标签是指向图像 ID 的标签
扩展 DOCKERFILE
卷
绑定坐骑
Docker 编写
docker-cheat-sheet
Docker 命令、帮助和提示
显示命令和管理命令
$ docker
Docker 版本信息
$ docker version
显示集装箱数量等信息
$ docker info
使用容器
在前台创建并运行容器
$ docker container run -it -p 80:80 nginx
创建并在后台运行容器
$ docker container run -d -p 80:80 nginx
速记
$ docker container run -d -p 80:80 nginx
命名容器
$ docker container run -d -p 80:80 --name nginx-server nginx
提示:RUN 做了什么
- 在图像缓存中查找名为 nginx 的图像
- 如果在缓存中找不到,它会查找 Dockerhub 上的默认镜像仓库
- 将其拉下来(最新版本),存储在图像缓存中
- 在新容器中启动它
- 我们指定在主机上使用端口 80- 并转发到容器上的端口 80
- 我们可以执行“$ docker container run --publish 8000:80 --detach nginx”来使用端口 8000
- 我们可以指定类似“nginx:1.09”的版本
列出正在运行的容器
$ docker container ls
或者
$ docker ps
列出所有容器(即使未运行)
$ docker container ls -a
停止容器
$ docker container stop [ID]
停止所有正在运行的容器
$ docker stop $(docker ps -aq)
删除容器(无法删除正在运行的容器,必须先停止)
$ docker container rm [ID]
要删除正在运行的容器,请使用 force(-f)
$ docker container rm -f [ID]
删除多个容器
$ docker container rm [ID] [ID] [ID]
删除所有容器
$ docker rm $(docker ps -aq)
获取日志(使用名称或 ID)
$ docker container logs [NAME]
列出容器中正在运行的进程
$ docker container top [NAME]
提示:关于容器
Docker 容器通常被比作虚拟机,但它们实际上只是在主机操作系统上运行的进程。在 Windows/Mac 系统中,Docker 运行在一个微型虚拟机中,因此要查看进程,您需要直接连接到该虚拟机。而在 Linux 系统中,您可以运行“ps aux”直接查看进程。
图像命令
列出我们已拉取的镜像
$ docker image ls
我们也可以只拉下图片
$ docker pull [IMAGE]
删除图片
$ docker image rm [IMAGE]
删除所有图像
$ docker rmi $(docker images -a -q)
提示:关于图像
- 图像是应用程序二进制文件和依赖项,其中包含有关图像数据和如何运行图像的元数据
- 镜像不是一个完整的操作系统。没有内核,也没有内核模块(驱动程序)
- Host提供内核,VM之间差别很大
一些示例容器创建
NGINX:
$ docker container run -d -p 80:80 --name nginx nginx (-p 80:80 is optional as it runs on 80 by default)
阿帕奇:
$ docker container run -d -p 8080:80 --name apache httpd
蒙戈德:
$ docker container run -d -p 27017:27017 --name mongo mongo
MYSQL:
$ docker container run -d -p 3306:3306 --name mysql --env MYSQL_ROOT_PASSWORD=123456 mysql
集装箱信息
查看容器信息
$ docker container inspect [NAME]
特定属性(--格式)
$ docker container inspect --format '{{ .NetworkSettings.IPAddress }}' [NAME]
性能统计(CPU、内存、网络、磁盘等)
$ docker container stats [NAME]
访问容器
创建新的 nginx 容器并进入
$ docker container run -it --name [NAME] nginx bash
- i = 交互式 如果未连接则保持 STDIN 处于打开状态
- t = tty-打开提示符
对于 Git Bash,使用“winpty”
$ winpty docker container run -it --name [NAME] nginx bash
运行/创建 Ubuntu 容器
$ docker container run -it --name ubuntu ubuntu
(没有 bash 因为 ubuntu 默认使用 bash)
您还可以使用 -rm 标志使退出容器时不会停留
$ docker container run --rm -it --name [NAME] ubuntu
访问已经创建的容器,以-ai开头
$ docker container start -ai ubuntu
使用 exec 编辑配置等
$ docker container exec -it mysql bash
Alpine 是一款非常小巧的 Linux 发行版,非常适合 docker
$ docker container run -it alpine sh
(使用 sh 因为它不包含 bash)
(alpine 使用 apk 作为其包管理器 - 如果需要可以安装 bash)
联网
“bridge”或“docker0”是默认网络
获取端口
$ docker container port [NAME]
列出网络
$ docker network ls
检查网络
$ docker network inspect [NETWORK_NAME]
("bridge" is default)
创建网络
$ docker network create [NETWORK_NAME]
在网络上创建容器
$ docker container run -d --name [NAME] --network [NETWORK_NAME] nginx
将现有容器连接到网络
$ docker network connect [NETWORK_NAME] [CONTAINER_NAME]
断开容器与网络的连接
$ docker network disconnect [NETWORK_NAME] [CONTAINER_NAME]
从容器中分离网络
$ docker network disconnect
图像标记并推送至 DOCKERHUB
标签是指向图像 ID 的标签
$ docker image ls
你会看到每个图像都有一个标签
重新标记现有图像
$ docker image tag nginx btraversy/nginx
上传到dockerhub
$ docker image push bradtraversy/nginx
如果被拒绝,
$ docker login
为新图像添加标签
$ docker image tag bradtraversy/nginx bradtraversy/nginx:testing
DOCKERFILE 部分
- FROM - 使用的操作系统。常见的有 alpine、debian、ubuntu
- ENV——环境变量
- RUN——运行命令/shell脚本等
- EXPOSE——要公开的端口
- CMD - 从映像启动新容器时运行的最终命令
- WORKDIR - 设置工作目录(也可以使用“RUN cd /some/path”)
- COPY # 将文件从主机复制到容器
从 dockerfile 构建镜像(reponame 可以是任意的)
来自与 Dockerfile 相同的目录
$ docker image build -t [REPONAME] .
提示:缓存和顺序
- 如果您重新运行构建,它会很快,因为所有内容都被缓存了。
- 如果您更改一行并重新运行,则该行及其后的所有内容都不会被缓存
- 将变化最大的内容放在 Dockerfile 的底部
扩展 DOCKERFILE
使用 nginx 自定义 html 页面的 Dockerfile
FROM nginx:latest # Extends nginx so everything included in that image is included here
WORKDIR /usr/share/nginx/html
COPY index.html index.html
从 Dockerfile 构建镜像
$ docker image build -t nginx-website
运行它
$ docker container run -p 80:80 --rm nginx-website
标记并推送到 Dockerhub
$ docker image tag nginx-website:latest btraversy/nginx-website:latest
$ docker image push bradtraversy/nginx-website
卷
卷 - 在容器 UFS 之外创建特殊位置。用于数据库
绑定挂载 - 将容器路径链接到主机路径
检查卷
$ docker volume ls
清理未使用的卷
$ docker volume prune
拉取mysql镜像进行测试
$ docker pull mysql
检查并查看音量
$ docker image inspect mysql
运行容器
$ docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True mysql
检查容器内的容量
$ docker container inspect mysql
提示:坐骑
- 您还将看到 mounts 下的卷
- 容器在主机上拥有自己独特的位置来存储数据
- 来源:xxx 是它在主机上的位置
检查卷
$ docker volume ls
例如,没有办法区分 2 个 mysql 容器的卷,所以我们使用命名卷
命名卷(添加 -v 命令)(此处的名称是 mysql-db,可以是任何名称)
$ docker container run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=True -v mysql-db:/var/lib/mysql mysql
检查新命名的卷
docker volume inspect mysql-db
绑定坐骑
- 无法在 Dockerfile 中使用,在运行时指定(也使用 -v)
- ...运行-v /Users/brad/stuff:/path/container(mac/linux)
- ...运行-v //c/Users/brad/stuff:/path/container(windows)
提示:不要输入本地路径,对于工作目录使用 $(pwd):/path/container - 除非您在用户文件夹中,否则在 Windows 上可能无法工作
运行并能够编辑 index.html 文件(本地目录应该有 Dockerfile 和 index.html)
$ docker container run -p 80:80 -v $(pwd):/usr/share/nginx/html nginx
进入容器并检查
$ docker container exec -it nginx bash
$ cd /usr/share/nginx/html
$ ls -al
您可以在容器中创建一个文件,它也将存在于主机上
$ touch test.txt
Docker 编写
- 配置容器之间的关系
- 将我们的 docker 容器运行设置保存在易于阅读的文件中
- 2 个部分:YAML 文件(docker.compose.yml)+ CLI 工具(docker-compose)
1. docker.compose.yml - 描述以下解决方案
- 容器
- 网络
- 卷
2. docker-compose CLI - 用于使用 YAML 文件进行本地开发/测试自动化
示例撰写文件(来自 Bret Fishers 课程)
version: '2'
# same as
# docker run -p 80:4000 -v $(pwd):/site bretfisher/jekyll-serve
services:
jekyll:
image: bretfisher/jekyll-serve
volumes:
- .:/site
ports:
- '80:4000'
运行
docker-compose up
您可以在后台运行
docker-compose up -d
清理
docker-compose down
Git 仓库:Docker
文章来源:https://dev.to/hasone/docker-cheat-sheet-27po