2021-12-07 14:22:25

docker工作中常用命令参考

[TOC]

工作中用的比较多的命令。

docker

run

systemctl start docker #启动 systemctl daemon-reload #守护进程重启 systemctl restart docker / service docker restart #重启docker服务 docker service docker stop / docker systemctl stop docker #关闭

image

构建

docker build -t getting-started . # getting-started 为名字 . 表示在当前目录找 Dockerfile文件

清理镜像文件

docker image prune

container

删除未运行的容器

docker container prune

查看容器状态

docker stats

docker ps # 查看容器状态 docker ps -a docker logs -f <container-id> # 查看容器日志

运行容器

docker run --network todo-app --network-alias mysql -p 3306:3306 --name mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=todos -d mysql:8.0.19

参数说明

  • --name 为新建的容器命名
  • --network 链接到网络。不同于named volume, network不会自动创建。
  • --network-alias为容器取个别名。这样,其他容器就可以通过mysql 链接到这个容器。
  • -e 环境变量,MYSQL_ROOT_PASSWORD配置MySQL的root用户的登录密码。这里指定数据库为todos, 如果数据库不存在会自动创建。
  • -p 端口映射,此处映射主机3306端口到容器的3306端口
  • -d 以后台守护进程方式运行,成功启动容器后输出容器的完整ID
  • -v 配置卷信息,把卷和内部容器的目录关联起来。两种方式,named volume or mount host directory。当named volume不存在时,docker 会自动创建。
  • mysql:8.0.19 MySQL镜像名称

进入容器

docker exec -ti xxx /bin/bash

停止容器

docker stop <the-container-id>

删除容器

docker rm <the-container-id>

用于数据持久化

docker volume create todo-db # 创建有名的volume, 实际的磁盘路径docker会管理。 docker volume inspect todo-db # 查看valume的具体信息。 [ { "CreatedAt": "2019-09-26T02:18:36Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/todo-db/_data", "Name": "todo-db", "Options": {}, "Scope": "local" } ]

网络

用户不同容器之间通信

docker network create todo-app # 创建名为todo-app 的网络

仓库

docker login -u YOUR-USER-NAME # 登录仓库 docker tag getting-started YOUR-USER-NAME/getting-started # 给镜像打标签 docker push YOUR-USER-NAME/getting-started # 发布镜像 docker pull YOUR-USER-NAME/getting-started # 拉取镜像

容器编排

swarm

swarm

### 创建集群 `docker swarm init --advertise-addr 192.168.8.81` ### 添加work `docker swarm join --token SWMTKN-1-11tlf4xgudkq9i8qnuh1rqy0lqt7k63rbpxg1z8sd4he313jz3-aqdjvmha1ow4umtj0be09ktxz 192.168.8.81:2377`

stack

### 发布 `docker stack deploy -c stack.yml all_publish --with-registry-auth` ### 查看stack `docker stack ls` ### 查看服务 `docker stack services ask2buy` ### 查看进程 `docker stack ps ask2buy` ### 删除stack `docker stack rm seastack`

service

docker service ls # 查看运行中的service docker service ps all_publish_dev_api_go # 查看某个服务运行状态 docker service logs all_publish_dev_api_go # 查看某个服务的日志 docker service update all_publish_dev_api_go # 重启服务

compose

install

https://github.com/docker/compose

  1. python sudo pip install -U docker-compose
  2. 直接下载编译好的二进制文件。
  3. 使用docker运行。

define

docker-compose.yml 示例

version: "3.7" services: app: # 这个service name 会自动变成 network alias, 所以其他service 可以通过app 找到这个service image: node:12-alpine # 镜像名字 command: sh -c "yarn install && yarn run dev" # 启动命令 ports: # 端口映射 - 3000:3000 working_dir: /app # 工作目录 volumes: # 卷信息 - ./:/app environment: # 环境变量 MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: secret MYSQL_DB: todos mysql: # mysql service image: mysql:5.7 volumes: - todo-mysql-data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: todos volumes: # 定义的卷信息 todo-mysql-data:

run

docker-compose up -d # 运行stack -d 是后台模式 docker-compose logs -f # 查看日志 docker-compose logs -f app # 查看 service app 的日志 docker-compose down # 关闭stack

宿主机外网ip不能访问的问题

说明,我遇到的问题是这个外网ip是同一个服务器。这个服务器提供了api服务,但是不是docker服务。

extra_hosts: - "api.go2live.cn:192.168.8.195" - "api2.go2live.cn:192.168.8.195"

经验

遇到问题,可以直接用docker运行镜像看能不能起来,然后看日志

清理磁盘

docker system 命令

参考

docker system df 查看docker磁盘占用。

docker system prune 清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

docker system prune -a 理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。

手动清理

对于旧版的Docker(版本1.13之前),是没有Docker System命令的,因此需要进行手动清理。这里给出几个常用的命令:

删除所有关闭的容器

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像)

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

删除所有dangling数据卷(即无用的Volume)

docker volume rm $(docker volume ls -qf dangling=true)

日志问题

手动清理:

truncate -s 0 /xxxx

限制Nginx容器的日志文件大小

nginx: image: nginx:1.12.1 restart: always logging: driver: "json-file" options: max-size: "5g"

本文链接:http://blog.go2live.cn/post/docker.html

-- EOF --