Docker命令大全

通过 docker —help 查看所有命令选项,通过 docker <command> —help 更深入的了解指定的 Docker 命令使用方法

image.png

分类 命令 描述
镜像仓库 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 <镜像名>

  1. #按名称搜索云端镜像
  2. docker search redis
  3. #按名称redis搜索出星数至少为3颗星的镜像
  4. docker search --filter stars=3 redis
  5. #按名称搜索并显示非截断描述(--no-trunc)
  6. docker search --stars=3 --no-trunc redis
  7. #显示名称中包含“redis”的镜像,并且是自动构建
  8. docker search --filter "is-automated=true" --no-trunc redis
  9. #显示的图像名称包含“redis”,至少3颗星,并且是官方版本
  10. docker search --filter "is-official=true" --filter "stars=3" redis
  11. #格式化选项(--format)使用Go模板漂亮地打印搜索输出
  12. 1.使用不带标头的模板,NameStarCount为所有图像输出 以冒号分隔的条目和条目:
  13. docker search --format "{{.Name}}:{{.StarCount}}" redis
  14. 2.输出表格格式:
  15. docker search --format "table {{.Name}}\t{{.IsAutomated}}\t{{.IsOfficial}}" redis

拉取镜像 docker pull <镜像 [:版本号]>

  1. #拉取镜像
  2. docker pull <IMAGE_NAME> #默认最新版本的,相当于 <IMAGE_NAME>:latest
  3. docker pull <IMAGE_NAME>:latest #拉取最新版本的
  4. docker pull <IMAGE_NAME>:5.0.5 #指定版本

列出本地主机上的镜像docker images -a

  1. #列出本地的镜像
  2. docker image ls -a
  3. docker images -a
  4. #列出本地全部镜像的id
  5. docker image ls -aq
  6. docker images -aq
  7. KimdeMacBook-Air:~ kim$ docker images -a
  8. REPOSITORY TAG IMAGE ID CREATED SIZE
  9. redis 3.0 90d5884b1ee0 5 days ago 188 MB
  10. redis 4.0 90d5884b1ee0 5 days ago 188 MB
  11. nginx latest 6f8d099c3adc 12 days ago 182.7 MB
  12. mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
  • REPOSITORY表示镜像的仓库源
  • TAG镜像的标签
  • IMAGE ID镜像ID
  • CREATED镜像创建时间
  • SIZE镜像大小

删除镜像docker rmi <镜像id|镜像name>

  1. #通过image的id来指定删除镜像
  2. docker image rm <IMAGE_ID ||IMAGE_NAME>
  3. docker rmi <IMAGE_ID ||IMAGE_NAME>
  4. #要删除全部images,(首先要停止该服务的容器和卸载容器)
  5. docker image rm $(docker image ls -aq)
  6. docker rmi $(docker images -q)
  7. #想要删除untagged images,也就是那些id为<None>的image的话可以用
  8. docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

更新镜像 docker commit

  1. docker container ls -a #通过找到容器id
  2. docker commit -m="updete redis" -a="kim-redis" 43c93a65caf7 kim-redis:v2
  3. #启动一个容器
  4. docker run -it kim-redis:v2 /bin/bash
  • -m提交的描述信息
  • -a 指定镜像作者
  • 43c93a65caf7容器 ID
  • kim-redis:v2 指定要创建的目标镜像名

Docker 容器使用

查看容器命令docker ps -asl

  1. #查看container的服务(ID、名字、等)
  2. docker container ls #正在运行的容器服务
  3. docker container ls -a #所有的容器服务
  4. #批量获取容器ID
  5. docker container ls -aq
  6. -a, --all Show all containers (default shows just running)
  7. -f, --filter filter Filter output based on conditions provided
  8. --format string Pretty-print containers using a Go template
  9. -n, --last int Show n last created containers (includes all states) (default -1)
  10. -l, --latest Show the latest created container (includes all states)
  11. --no-trunc Don't truncate output
  12. -q, --quiet Only display numeric IDs
  13. -s, --size Display total file sizes

image.png

初次安装镜像启动容器

同一仓库源可以有多个 TAG,如 redis 仓库源里,有3.04.0 版本,使用REPOSITORY:TAG来定义不同的镜像

  1. #如果要使用版本为3.0的redis镜像来运行容器时,命令
  2. 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镜像

启动容器

  1. #以镜像的方式启动服务
  2. docker start <IMAGE_NAME||IMAGE_ID >
  3. #以镜像的方式重启服务
  4. docker restart <IMAGE_NAME||IMAGE_ID >
  5. #以镜像的方式停止服务
  6. docker stop <IMAGE_NAME||IMAGE_ID >
  7. #以容器的方式启动服务
  8. docker container start <IMAGE_NAME||IMAGE_ID >
  9. #以容器的方式重启服务
  10. docker container restart <IMAGE_NAME||IMAGE_ID >
  11. ##以容器的方式停止服务(⚠️:想删除container,容器不可以是运行状态,先把容器的服务停止)
  12. docker container stop <IMAGE_NAME||IMAGE_ID >

访问容器

在创造容器时使用 -d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入

  1. #方式1: docker attach
  2. docker attach <IMAGE_NAME||IMAGE_ID >
  3. 方式2: docker exec (推荐,因为这命令退出容器终端时,不会导致容器的停止)
  4. docker exec -it <IMAGE_NAME||IMAGE_ID > /bin/bash
  5. #访问容器示例:
  6. docker exec -itd redis /bin/bash
  7. docker exec -itd redis bash #以shell方式访问
  8. docker exec -itd redis redis-cli #直接用redis-cli访问容器内redis
  9. -i interactive交互式操作
  10. -t terminal终端
  11. -d 后台一直运行

更多参数说明请使用 docker exec —help 命令查看

导出/导入容器快照

  1. #导出容器快照
  2. docker export nginx> nginx.tar
  3. #导入容器快照
  4. cat nginx.tar | docker import - nginx:6.6.6

关闭删除卸载容器

  1. #批量停止容器
  2. docker container stop $(docker container ls -aq)
  3. #批量删除容器
  4. docker container rm $(docker container ls -aq)
  5. #批量删除镜像
  6. docker image rm $(docker image ls -aq)
  7. #删除指定的container
  8. docker rm -f <CONTAINER_ID || CONTAINER_NAME>
  9. docker container rm -f <CONTAINER_ID || CONTAINER_NAME>
  10. #查询镜像、容器、运行服务
  11. docker images && docker container ls -a && docker ps

Docker 容器连接

使用docker ps可以看到容器端口 5000 绑定主机端口 32768

  1. runoob@runoob:~$ docker ps
  2. CONTAINER ID IMAGE COMMAND ... PORTS NAMES
  3. fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper

我们也可以使用 -p 标识来指定容器端口绑定到主机端口。两种方式的区别是:

  • -P是容器内部端口随机映射到主机的高端口
  • -p是容器内部端口绑定到指定的主机端口

    指定容器绑定的网络地址,比如绑定 127.0.0.1:5001

  1. runoob@runoob:~$ docker run -d -p 127.0.0.1:5001:5000 7533524/webapp python app.py
  2. 95c6ceef88ca3e71eaf303c2833fd6701d8d1b2572b5613b5a932dfdfe8a857c
  3. runoob@runoob:~$ docker ps
  4. CONTAINER ID IMAGE COMMAND ... PORTS NAMES
  5. 95c6ceef88ca 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker
  6. 33e4523d30aa 7533524/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik

就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口

如果要绑定 UDP 端口,可以在端口后面加上 /udp

  1. runoob@runoob:~$ docker run -d -p 127.0.0.1:5000:5000/udp 7533524/webapp python app.py
  2. 6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a
  3. runoob@runoob:~$ docker ps
  4. CONTAINER ID MAGE COMMAND ... PORTS NAMES
  5. 6779686f06f6 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5000->5000/udp drunk_visvesvaraya
  6. 95c6ceef88ca 7533524/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker

docker port xxxx 命令可以让我们快捷地查看端口的绑定情况 docker port mysql

Docker 仓库管理

推送镜像

  1. #推送镜像的命令: docker push <注册的用户名/镜像:版本>
  2. docker tag redis:latest 7533524/:6.66
  3. docker push 7533524/redis:6.66
  • 登录docker login
  • 退出docker logout

    提示denied: requested access to the resource is denied,那是因为用的不是你的注册的用户名

—————————————

Docker操作MySQL

  1. #--------------------------------------------------------------------------------------------------
  2. #安装mysql服务
  3. docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  4. docker exec -it mysql /bin/bash
  5. #--------------------------------------------------------------------------------------------------
  6. #停止服务后卸载容器、镜像
  7. docker container stop mysql && docker rm mysql && docker image rm mysql

Docker操作Redis

  1. 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
  2. #docker exec -it redis /bin/bash #docker exec -it redis bash #使用 shell 登录容器内操作
  3. #docker run -it --link redis:redis --rm redis redis-cli -h redis -p 6379
  4. #docker container ls -a && docker restart redis && docker ps #查看容器、重启、查看服务
  5. -d 容器后台运行,并返回容器ID
  6. -p 指定端口映射,格式为:主机(宿主)端口:容器端口,外部可以直接通过宿主机ip:6379 访问到 Redis 的服务
  7. -v 绑定一个卷,资源映射
  8. --name 给容器命名
  9. redis-server <执行文件>: 指定容器启动时执行的命令
  10. $PWD/data Redis的持久化文件存储
  11. --appendonly yes 开启持久化
  12. daemonize yes 守护进程
  13. --restart=always Docker启动容器就启动
  14. #--------------------------------------------------------------------------------------------------
  15. #停止服务后卸载容器、镜像
  16. docker container stop redis && docker rm redis && docker image rm redis


Docker操作MongoDB

  1. #docker pull mongo:latest
  2. #docker exec -it mongo /bin/bash
  3. docker run -itd --name mongo -p 27017:27017 mongo --auth

-p 27017:27017 映射容器服务的 27017 端口到宿主机的 27017 端口
—auth 需要密码才能访问容器服务

  1. $ docker exec -it mongo mongo admin
  2. # 创建一个名为 admin,密码为 123456 的用户。
  3. db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
  4. # 尝试使用上面创建的用户信息进行连接。
  5. db.auth('admin', '123456')