Docker命令大全
通过 docker —help 查看所有命令选项,通过 docker <command> —help 更深入的了解指定的 Docker 命令使用方法
分类 | 命令 | 描述 |
---|---|---|
镜像仓库 | login | |
search | ||
pull | ||
push | ||
容器 生命周期管理 |
run | |
start/restart/stop | 启动/重启/停止/(一个或多个)容器 | |
kill | ||
rm | ||
pause/unpause | ||
create | ||
exec | ||
容器操作 | ps | |
inspect | ||
top | ||
attach | ||
events | ||
logs | ||
wait | ||
export | ||
port | ||
容器rootfs 命令 |
commit | |
cp | ||
diff | ||
本地镜像管理 | images | |
rmi | ||
tag | ||
build | ||
history | ||
save | ||
load | ||
import | ||
info|version | info | |
version |
Docker镜像的使用
查找镜像 docker search <镜像名>
#按名称搜索云端镜像
docker search redis
#按名称redis搜索出星数至少为3颗星的镜像
docker search --filter stars=3 redis
#按名称搜索并显示非截断描述(--no-trunc)
docker search --stars=3 --no-trunc redis
#显示名称中包含“redis”的镜像,并且是自动构建
docker search --filter "is-automated=true" --no-trunc redis
#显示的图像名称包含“redis”,至少3颗星,并且是官方版本
docker search --filter "is-official=true" --filter "stars=3" redis
#格式化选项(--format)使用Go模板漂亮地打印搜索输出
1.使用不带标头的模板,Name并StarCount为所有图像输出 以冒号分隔的条目和条目:
docker search --format "{{.Name}}:{{.StarCount}}" redis
2.输出表格格式:
docker search --format "table {{.Name}}\t{{.IsAutomated}}\t{{.IsOfficial}}" redis
拉取镜像 docker pull <镜像 [:版本号]>
#拉取镜像
docker pull <IMAGE_NAME> #默认最新版本的,相当于 <IMAGE_NAME>:latest
docker pull <IMAGE_NAME>:latest #拉取最新版本的
docker pull <IMAGE_NAME>:5.0.5 #指定版本
列出本地主机上的镜像docker images -a
#列出本地的镜像
docker image ls -a
docker images -a
#列出本地全部镜像的id
docker image ls -aq
docker images -aq
KimdeMacBook-Air:~ kim$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 3.0 90d5884b1ee0 5 days ago 188 MB
redis 4.0 90d5884b1ee0 5 days ago 188 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
- REPOSITORY表示镜像的仓库源
- TAG镜像的标签
- IMAGE ID镜像ID
- CREATED镜像创建时间
- SIZE镜像大小
删除镜像docker rmi <镜像id|镜像name>
#通过image的id来指定删除镜像
docker image rm <IMAGE_ID ||IMAGE_NAME>
docker rmi <IMAGE_ID ||IMAGE_NAME>
#要删除全部images,(首先要停止该服务的容器和卸载容器)
docker image rm $(docker image ls -aq)
docker rmi $(docker images -q)
#想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
更新镜像 docker commit
docker container ls -a #通过找到容器id
docker commit -m="updete redis" -a="kim-redis" 43c93a65caf7 kim-redis:v2
#启动一个容器
docker run -it kim-redis:v2 /bin/bash
- -m提交的描述信息
- -a 指定镜像作者
- 43c93a65caf7容器 ID
- kim-redis:v2 指定要创建的目标镜像名
Docker 容器使用
查看容器命令docker ps -asl
#查看container的服务(ID、名字、等)
docker container ls #正在运行的容器服务
docker container ls -a #所有的容器服务
#批量获取容器ID
docker container ls -aq
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display numeric IDs
-s, --size Display total file sizes
初次安装镜像启动容器
同一仓库源可以有多个 TAG,如 redis 仓库源里,有3.04.0 版本,使用REPOSITORY:TAG来定义不同的镜像
#如果要使用版本为3.0的redis镜像来运行容器时,命令
docker run -t -i -d -p 6379:6379 redis:3.0 /bin/bash
- -i interactive交互式操作
- -t terminal终端
- -d 后台一直运行
- -p 6379:6379 映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务
- redis:3.0 这是指用 redis:3.0 版本镜像为基础来启动容器
- /bin/bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
- 如果不指定镜像的版本标签,docker 默认使用 REPOSITORY:latest镜像
启动容器
#以镜像的方式启动服务
docker start <IMAGE_NAME||IMAGE_ID >
#以镜像的方式重启服务
docker restart <IMAGE_NAME||IMAGE_ID >
#以镜像的方式停止服务
docker stop <IMAGE_NAME||IMAGE_ID >
#以容器的方式启动服务
docker container start <IMAGE_NAME||IMAGE_ID >
#以容器的方式重启服务
docker container restart <IMAGE_NAME||IMAGE_ID >
##以容器的方式停止服务(⚠️:想删除container,容器不可以是运行状态,先把容器的服务停止)
docker container stop <IMAGE_NAME||IMAGE_ID >
访问容器
在创造容器时使用 -d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
#方式1: docker attach
docker attach <IMAGE_NAME||IMAGE_ID >
方式2: docker exec (推荐,因为这命令退出容器终端时,不会导致容器的停止)
docker exec -it <IMAGE_NAME||IMAGE_ID > /bin/bash
#访问容器示例:
docker exec -itd redis /bin/bash
docker exec -itd redis bash #以shell方式访问
docker exec -itd redis redis-cli #直接用redis-cli访问容器内redis
-i interactive交互式操作
-t terminal终端
-d 后台一直运行
更多参数说明请使用 docker exec —help 命令查看
导出/导入容器快照
#导出容器快照
docker export nginx> nginx.tar
#导入容器快照
cat nginx.tar | docker import - nginx:6.6.6
关闭删除卸载容器
#批量停止容器
docker container stop $(docker container ls -aq)
#批量删除容器
docker container rm $(docker container ls -aq)
#批量删除镜像
docker image rm $(docker image ls -aq)
#删除指定的container
docker rm -f <CONTAINER_ID || CONTAINER_NAME>
docker container rm -f <CONTAINER_ID || CONTAINER_NAME>
#查询镜像、容器、运行服务
docker images && docker container ls -a && docker ps
Docker 容器连接
使用docker ps可以看到容器端口 5000 绑定主机端口 32768
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
我们也可以使用 -p 标识来指定容器端口绑定到主机端口。两种方式的区别是:
- -P是容器内部端口随机映射到主机的高端口
- -p是容器内部端口绑定到指定的主机端口
指定容器绑定的网络地址,比如绑定 127.0.0.1:5001
runoob@runoob:~$ docker run -d -p 127.0.0.1:5001:5000 7533524/webapp python app.py
95c6ceef88ca3e71eaf303c2833fd6701d8d1b2572b5613b5a932dfdfe8a857c
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
95c6ceef88ca 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker
33e4523d30aa 7533524/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik
就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口
如果要绑定 UDP 端口,可以在端口后面加上 /udp
runoob@runoob:~$ docker run -d -p 127.0.0.1:5000:5000/udp 7533524/webapp python app.py
6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a
runoob@runoob:~$ docker ps
CONTAINER ID MAGE COMMAND ... PORTS NAMES
6779686f06f6 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5000->5000/udp drunk_visvesvaraya
95c6ceef88ca 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker
docker port xxxx 命令可以让我们快捷地查看端口的绑定情况 docker port mysql
Docker 仓库管理
推送镜像
#推送镜像的命令: docker push <注册的用户名/镜像:版本>
docker tag redis:latest 7533524/:6.66
docker push 7533524/redis:6.66
- 登录docker login
- 退出docker logout
提示denied: requested access to the resource is denied,那是因为用的不是你的注册的用户名
—————————————
Docker操作MySQL
#--------------------------------------------------------------------------------------------------
#安装mysql服务
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
docker exec -it mysql /bin/bash
#--------------------------------------------------------------------------------------------------
#停止服务后卸载容器、镜像
docker container stop mysql && docker rm mysql && docker image rm mysql
Docker操作Redis
docker run -itd --name redis -d -p 6379:6379 -v /usr/redis/redis.conf:/etc/redis.conf -v /usr/redis/data:/data redis redis-server /etc/redis.conf
#docker exec -it redis /bin/bash #docker exec -it redis bash #使用 shell 登录容器内操作
#docker run -it --link redis:redis --rm redis redis-cli -h redis -p 6379
#docker container ls -a && docker restart redis && docker ps #查看容器、重启、查看服务
-d: 容器后台运行,并返回容器ID
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口,外部可以直接通过宿主机ip:6379 访问到 Redis 的服务
-v: 绑定一个卷,资源映射
--name: 给容器命名
redis-server <执行文件>: 指定容器启动时执行的命令
$PWD/data Redis的持久化文件存储
--appendonly yes 开启持久化
daemonize yes 守护进程
--restart=always Docker启动容器就启动
#--------------------------------------------------------------------------------------------------
#停止服务后卸载容器、镜像
docker container stop redis && docker rm redis && docker image rm redis
Docker操作MongoDB
#docker pull mongo:latest
#docker exec -it mongo /bin/bash
docker run -itd --name mongo -p 27017:27017 mongo --auth
-p 27017:27017 映射容器服务的 27017 端口到宿主机的 27017 端口
—auth 需要密码才能访问容器服务
$ docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')