docker 系列文章目录
第一章 linux安装docker第二章 Docker常用命令
第三章 安装
第四章 Dockerfile
文章目录
常用命令
run
docker run :创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -d: 后台运行容器,并返回容器ID
- -i: 以交互模式运行容器,通常与 -t 同时使用
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
- –name=myDocker;设置容器别名
- -v: 设置容器挂载卷
实例
使用镜像 nginx:latest,设置容器名称,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /myData 映射到容器的 /data。
docker run -name=myNginx -p 80:80 -v /myData:/data -d nginx:latest
start/stop/restart
- docker start :启动容器
- docker stop :停止运行中的容器
- docker restart :重启容器
语法
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
实例
启动myNginx容器
docker start myNginx
停止stop容器
docker stop myNginx
重启restart容器
docker restart myNginx
rm
docker rm:删除一个或多个容器
语法
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -f: 强制移除正在运行的容器(使用SIGKILL)
- -l: 删除指定的链接
- -v: 删除与容器关联的匿名卷
实例
强制删除容器myNginx
docker rm -f myNginx
删除所有已经停止的容器:
docker rm $(docker ps -a -q)
exec
docker exec :在运行的容器中执行命令
语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -d :分离模式:在后台运行命令
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
实例
docker exec -it myNginx bash
ps
docker ps:查看容器列表
语法
docker ps [OPTIONS]
OPTIONS说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- –format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- –no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
实例
[root@iZ2zeejpwuxj24b981t19nZ data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
178e51398529 redis:6.2.6 "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp, 6379/tcp myredis
b909eca4e779 mysql:5.7 "docker-entrypoint.s…" 8 days ago Up 8 days 33060/tcp, 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mysql01
inspect
docker inspect:查看容器/镜像的元数据
语法
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- –type :为指定类型返回JSON。
实例
[root@iZ2zeejpwuxj24b981t19nZ data]# docker inspect mysql01
[
{
"Id": "b909eca4e779b1f88a6ae9f3e0f3591aad5c1061b014ce8cbb0bbe152bb028a5",
"Created": "2022-01-05T15:24:19.274165222Z",
"Path": "docker-entrypoint.sh",
"Args": [
"mysqld"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 3153457,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-01-05T15:58:00.156278756Z",
"FinishedAt": "2022-01-05T15:57:59.907427998Z"
},
"Image": "sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76",
...
logs
docker logs:获取容器的日志
语法
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
- -f : 跟踪日志输出
- –since :显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail :仅列出最新N条容器日志
实例
跟踪查看容器myredis的日志输出。
[root@iZ2zeejpwuxj24b981t19nZ data]# docker logs -f myredis
1:C 14 Jan 2022 02:08:48.228 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 14 Jan 2022 02:08:48.228 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 14 Jan 2022 02:08:48.228 # Configuration loaded
1:M 14 Jan 2022 02:08:48.228 * monotonic clock: POSIX clock_gettime
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.2.6 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | https://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 14 Jan 2022 02:08:48.229 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
login/logout
- docker login:登陆到Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
- docker logout:退出Docker镜像仓库
语法
docker login [OPTIONS] [SERVER]
docker logout [SERVER]
OPTIONS说明:
- -u :用户名
- -p :密码
实例
docker login -u 用户名 -p 密码
docker logout
pull
docker pull:从镜像仓库中拉取或者更新指定镜像
语法
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
- -a : 拉取所有 tag 镜像
实例
从远程仓库拉去最新nginx
docker pull nginx
push
docker push:将本地的镜像上传到镜像仓库,需要先登录镜像仓库
语法
docker push [OPTIONS] NAME[:TAG]
OPTIONS说明:
- -a, --all-tags Push all tagged images in the repository
–disable-content-trust Skip image signing (default true)
-q, --quiet Suppress verbose output
实例
上传本地镜像mynginx:v1到镜像仓库中
docker push mynginx:v1
search
docker search: 查找镜像
语法
docker search [OPTIONS] TERM
OPTIONS说明:
- –automated:弃用,只列出自动构建类型的镜像
- –filter , -f:基于给定条件过滤输出
- –format:使用模板格式化显示输出
- –limit:Max number of search results ,默认值25
- –no-trunc:禁止截断输出
- –stars , -s:弃用,只显示收藏数不小于几颗星的镜像,移到–filter中使用
实例
查询nginx前10条数据
docker search --limit 10 nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16141 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 2109 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 820 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 150 [OK]
nginxdemos/hello NGINX webserver that serves a simple page co… 82 [OK]
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 61 [OK]
nginx/nginx-ingress NGINX and NGINX Plus Ingress Controllers fo… 59
nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 57
nginx/nginx-prometheus-exporter NGINX Prometheus Exporter for NGINX and NGIN… 23
mailu/nginx Mailu nginx frontend 10 [OK]
commit
docker commit: 基于本地容器创建一个新的容器镜像
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
- -a :作者
- -c :使用Dockerfile指令来创建镜像
- -m : 提交说明
- -p :在commit时,将容器暂停
实例
制作个人mysql镜像版本为v0.0.1
[root ~]# docker commit -a 'XXX@qq.com' -m '个人mysql版本' b909eca4e779 mymysql:v0.0.1
sha256:af1a82a92d5975a71fe3ce3354ca98306c4717aab80c554d3f3d49a28e7a66f7
[root ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v0.0.1 af1a82a92d59 7 seconds ago 448MB
images
docker images: 查看本地容器镜像
语法
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
- -a :列出本地所有的镜像
- –digests :显示镜像的摘要信息
- -f :显示满足条件的镜像
- –format :指定返回值的模板文件
- –no-trunc :显示完整的镜像信息
- -q :显示镜像ID
实例
查看本地镜像列表
[root~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v0.0.1 af1a82a92d59 29 minutes ago 448MB
registry.cn-beijing.aliyuncs.com/haipaijiaoyu/haipaijiaoyu v0.0.1 af1a82a92d59 29 minutes ago 448MB
gitlab/gitlab-ce latest 46cd6954564a 12 days ago 2.36GB
redis 6.2.6 7614ae9453d1 3 weeks ago 113MB
redis latest 7614ae9453d1 3 weeks ago 113MB
mysql 5.7 c20987f18b13 3 weeks ago 448
rmi
docker rmi : 移除本地镜像
语法
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
- -f 强制删除
实例
删除46cd6954564a(image_id)容器
docker rmi -f 46cd6954564a
删除所有未被容器使用的镜像
docker image prune -a
tag
docker tag: 标记本地镜像,将其归入远程仓库
语法
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
实例
将镜像ID标记为mymysql:v0.0.1镜像
docker tag af1a82a92d59 mymysql:v0.0.1
build
docker build:使用 Dockerfile 创建镜像
语法
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
- –build-arg: 设置构建时的变量
- –no-cache: 默认false。设置该选项,将不使用Build Cache构建镜像
- –pull: 默认false。设置该选项,总是尝试pull镜像的最新版本
- –compress: 默认false。设置该选项,将使用gzip压缩构建的上下文
- –disable-content-trust: 默认true。设置该选项,将对镜像进行验证
- –file, -f: Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
- –isolation: 默认–isolation=“default”,即Linux命名空间;其他还有process或hyperv
- –label: 为生成的镜像设置metadata
- –squash: 默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
- –tag, -t: 镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
- –network: 默认default。设置该选项,Set the networking mode for the RUN instructions during build
- –quiet, -q: 默认false。设置该选项,Suppress the build output and print image ID on success
- –force-rm: 默认false。设置该选项,总是删除掉中间环节的容器
- –rm: 默认–rm=true,即整个构建过程成功后删除中间环节的容器
- -m: 设置内存最大值
- –memory-swap:设置Swap的最大值为内存+swap,"-1"表示不限swap
实例
docker build -f /home/Dockerfile .
save
docker save:指定镜像保存成 tar 归档文件
语法
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
- -o :输出到的文件。
实例
将镜像 mysql:5.7 生成 mysql.tar 文档
docker save -o mysql.tar mysql:5.7
load
docker load:导入
语法
docker load [OPTIONS]
OPTIONS说明:
- -i : 指定导入的文件,代替 STDIN
- -q : 精简输出信息
实例
导入镜像
docker load -i mysql.tar
import
docker import:导入
语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS说明:
- -c :应用docker 指令创建镜像
- -m :提交时的说明文字
实例
从镜像归档文件mysql.tar创建镜像,命名为mysql:v0.0.1
[root]# docker import mysql.tar mysql:v0.0.1
sha256:8fa8a506d425955f34180376c4b61f9dcd001dd270b1cb15c9aa2bdfd7e24fbf
[root]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql v0.0.1 8fa8a506d425 4 seconds ago 454MB
network
docker network: 网络管理
语法
docker network COMMAND
OPTIONS说明:
- connect 将容器连接到网络
- create 创建网络
- disconnect 断开容器与网络的连接
- inspect 显示一个或多个网络上的详细信息
- ls 容器列表
- prune 删除所有未使用的网络
- rm 删除一个或多个网络
实例
[root]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
758a225edc87dda784cad00cf6495d4319004ec2f8552bb0ddfce4e94281a9d2
[root]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "758a225edc87dda784cad00cf6495d4319004ec2f8552bb0ddfce4e94281a9d2",
"Created": "2022-01-24T14:48:02.212383799+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[root]# docker network connect mynet mysql01
[
{
"Name": "mynet",
"Id": "758a225edc87dda784cad00cf6495d4319004ec2f8552bb0ddfce4e94281a9d2",
"Created": "2022-01-24T14:48:02.212383799+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"b909eca4e779b1f88a6ae9f3e0f3591aad5c1061b014ce8cbb0bbe152bb028a5": {
"Name": "mysql01",
"EndpointID": "ea1e4ab3682228abe4d57c01c785c6ddc01491ffb7e5ee180cee52cb2d4fca5d",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]