Docker常用命令
Docker常用命令
Docker镜像命令
- docker images
- 查看所有的images
- docker images|grep voyage|grep none|awk '{print $3 }'|xargs docker rmi
- 删除所有指定标签的images
- docker pull-v
- 例如docker pull 10.37.210.125:5001/contiv/netplugin:1.2.0_6.3, 会默认加https:// 使用安全链接下载镜像
- 如果想使用http:// 非安全的链接下载镜像,需要修改docker 配置/etc/docker/daemon.json,如下:
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.basesize=20G"
],
"insecure-registries": ["10.37.210.125:5001", "10.37.218.29:5000"]
}
-
docker save
- 把本机镜像拷贝出来成一个文件,例如 docker save pause:3.0 -o myimage.rar
-
docker load
- 加载指定镜像,例如:docker load -i golang-1.2.0.tar
-
docker tag
- 给docker镜像添加一个新的tag, 例如: docker tag 10.37.1.2:5001:5001/contiv:0.1 tag 10.37.1.2:5001:5001/net:0.1
-
docker build
- 构建镜像到指定位置.eg: docker build -t 10.37.1.2:5001/contiv/netplugin:sj-001 ./ -f Dockerfile
- 如果是基于某个原始镜像进行编译,那么编译的环境必须有该镜像即先要docker pull下基础镜像再进行编译
-
docker push
- 推送镜像或者repository到镜像仓库. eg: docker push 10.37.210.125:5001/contiv/netplugin:test-001
- 注意,这里要先登录仓库:docker login 10.37.210.125:5001
-
docker rmi xxx
- 删除某个镜像
-
docker history xxx
- 递归地输出指定镜像的历史镜像
-
docker export
- 创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容.(expoxt后 的容器再import到Docker中,通过docker images –tree命令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的历史镜像)
Docker 生命周期管理命令
-
docker run
- docker run -d busybox:glibc sleep 100
用镜像busybox:glibc运行一个新的容器;-d表示在后台运行;因为该镜像没有持续的进程,如果不加sleep 100会马上退出。如果容器脚本有命令参数,那么也需要加上,例如:
docker run iperf:3.0 -s - docker run -d --network host busybox:glibc sleep 100
这里指定容器使用的网络模式是host,默认为docker0 bridge模式。另外还可以是none,或者container模式. - docker run --net=host -v /home/config.properties:/usr/local/config/config.properties 192.168.0.1:5000/library/123:456
这里指定容器使用的网络模式是host,并挂载本地主机文件/home/config.properties到容器内部,容器内部的文件为/usr/local/config/config.properties.如果指定只读,可以加上ro, 这样写 -v host-dir:container-dir:ro - docker run --net=host -e MYSQL_ROOT_PASSWORD="123456" mysql:latest
这里指定容器运行时的环境变量MYSQL_ROOT_PASSWORD为"123456" - docker run --name tomcat --cpus 1 -m 512M -e JAVA_OPTS='-Xmx512m -Xms512m' -p 8080:8080 -itd feisky/tomcat:8
- docker run -it --cpus=2 --memory="100m" ubuntu:latest /bin/bash
这里运行新容器,名为tomcat,指定资源、环境变量、端口映射和镜像 - docker run --name test --rm -i -t --privileged -v /etc:/etc:ro -e PASSWORD="123456" 192.168.0.1:5000/library/busybox:v1.0 sleep 20
以特权模式运行容器
- docker run -d busybox:glibc sleep 100
-
docker stop
停止退出一个正在运行的容器 -
docker rm -f tomcat
删除旧容器 -
docker start
启动一个或多个已经停止的容器 -
docker restart
重启一个或多个容器 -
docker restart
重启容器内的某个进程 -
docker pause/unpause
暂停一个容器中的所有进程,该容器不能执行exec 命令, 也不能rm 被删除
Docker Debug命令
-
docker inspect
- 查看容器的详细信息,包含启动脚本和环境变量
- 进入容器和网络的netns命名空间的方法
- docker ps 查看容器的id
- docker inspect -f '{{.State.Pid}}' <容器id> //获取容器进程号
- ln -s /proc/<容器进程号>/ns/net /var/run/netns/<容器id> //将进程网络命名空间恢复到主机目录, 如果/var/run/netns目录不存在,以root用户手动创建目录即可。
- 执行ip netns 命令即可看到容器的网络命名空间
- nsenter -t <容器进程号> -n -F -- ip a //到容器命名空间中执行命令ip a
- 查看容器状态或者推出原因: docker inspect f2ddeebb133a -f '{{json .State}}' | jq
-
docker logs
- docker logs
- docker logs -f
查看实时log
- docker logs
-
docker ps --no-trunc
- 可查看完成容器ID
-
docker exec
- 在docker容器内部执行IP命令: docker exec -ti 12345678 ip
- 根据独一无二的容器名,在该容器内部执行bash命令:
docker exec -it `docker ps |grep docker-unique-name|awk '{print $1}'|awk FNR==1` bash
-
docker network 容器网络相关命令
- docker network prune 删除不被容器使用的所有网络资源,例如端口。容器删除后,端口仍被占用需要用这个命令回收
-
docker stats
实时显示容器资源消耗,包括CPU,MEM,netIO, BlockIO
Docker 容器使用资源查看
- docker stats docker-ID
Docker-compose
docker-compose 是一种单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理,需要安装工具docker-compose,并编辑一个yaml文件(定义了多个容器资源),常用命令如下:
- docker-compose up -d; docker-compose -f xx.yaml -d 启动服务
- docker-compose down 停止服务并删除containers, networks, images, and volumes
- docker-compose ps 列出所有容器
- docker-compose logs 查看服务日志
- docker-compose start 启动服务
- docker-compose stop 停止服务
如下所示,是一个mysql容器的docker-compose文件,使用它可以创建一个名为 mysql 的服务:
version: "2.1" #Docker Compose 文件的版本声明。请确保你的Docker Compose工具支持该版本。
services:
mysql:
image: registry.fit2cloud.com/fit2cloud3/mysql:5.7.25 # 指定容器使用的镜像
container_name: mysql # 指定容器的名称
ports:
- 3306:3306 # 将主机的3306端口映射到容器的3306端口
healthcheck: # 为 mysql 服务添加的健康检查配置,这将确保在启动时检查MySQL服务是否健康,以及在运行时是否继续保持健康。
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 10
environment:
MYSQL_ROOT_PASSWORD: Password123@mysql # 设置容器的环境变量,这里配置mysql的密码
volumes:
- /opt/demo/conf/my.cnf:/etc/mysql/conf.d/my.cnf # 挂载卷,将主机的/opt/demo/conf/my.cnf目录映射到容器的/etc/mysql/conf.d/my.cnf目录
- /opt/demo/bin/mysql:/docker-entrypoint-initdb.d/
- cmp-mysql-data:/var/lib/mysql # 挂载卷,将cmp-mysql-data映射到容器的/var/lib/mysql目录
networks:
- demo-network ## 将容器连接到demo-network网络
volumes:
cmp-mysql-data:
driver_opts:
type: none
device: /opt/demo/data/mysql
o: bind
输入docker-compose -f xx.yaml up -d 命令后,docker引擎会自动 docker-proxy -proto tcp -host-ip :: -host-port 3306 -container-ip 172.19.0.3 -container-port 3306 把容器的端口服务暴露出来。可以通过docker network list
以及docker network inspect demo-network
查看详细网络信息。
根据进程号查看容器
查看进程号PID,然后查看/proc/
常见问题
- 有些专门功能的容器例如kafka、mongo,POD里面一定有专门的二进制工具,如果没有一定是进错了容器,别进到pause容器了。