alamide的笔记库「 87篇笔记 」「 小破站已建 0 天啦 🐶 」


Docker 常用命令

2023-04-23, by alamide

Docker 一些常用的常用命令

1.帮助类启动命令

systemctl start docker

systemctl stop docker

systemctl restart docker

systemctl status docker

#开机启动
systemctl enable docker

#查看 docker 简要信息
docker info

docker --help

#具体命令帮助文档
docker run --help

2.镜像命令

2.1 docker images

列出本地镜像

docker images

#列出本地所有镜像
docker images -a

#只显示镜像 id
docker images -q

搜索某个镜像,镜像仓库地址

docker serach mysql

#列出前五个
docker search --limit 5 mysql

2.3 docker pull

下载镜像 docker pull 镜像名字[:TAG]

#获取 mysql 最新版
docker pull mysql

#获取 mysql5.7 版本
docker pull mysql:5.7

2.4 docker commit

提交容器副本,使其成为一个新的镜像

#运行 centos7
docker run -it centos:centos7 /bin/bash

#安装 vim
yum install vim

#Ctrl + p + q 退出

#制作新的镜像,新的镜像带有 vim 功能 -m 提交信息 -a 作者  cts 镜像名 1.2 版本号
docker commit -m="add vim " -a="alamide" 1faf600796bc cts:1.2

#运行并登入,可以看到可以直接使用 vim
docker run -it cts:1.2 /bin/bash

2.5 docker system df

查看镜像/容器/数据卷所占的空间

docker system df

2.6 docker rmi

删除某个镜像

#删除 mysql 最新版
docker rmi mysql

#删除特定版本
docker rmi mysql:5.7

#强制删除,创建容器实例后,需要加上 f
docker rmi -f mysql:5.7

#删除多个
docker rmi -f redis redis:6.0.8

#全部删除
docker rmi -f $(docker images -qa)

3.容器命令

先获取 centos7 镜像

docker pull centos:centos7

3.1 docker run

新建并启动 docker,docker run [OPTIONS] IMAGE

#/bin/bash 是命令 [-i interactive 交互式操作] [-t Allocate a pseudo-TTY 终端]
docker run -it centos:centos7 /bin/bash

#后台运行
docker run -d redis

3.2 docker ps

列出当前所有容器

#列出所有正在运行的容器
docker ps

#列出所有正在运行+历史上运行过的容器
docker ps -a

#列出最近创建的容器,所有状态的
docker ps -l

#列出最近的 3 个容器 -n 
docker ps -n 3

#只显示容器编号
docker ps -q

3.3 退出容器

exit docker run -it centos:centos7 /bin/bash ,以这种方式登入容器,退出,容器停止

Ctrl + p + q docker run -it centos:centos7 /bin/bash ,以这种方式登入容器,退出,容器不停止

3.4 docker start

启动已停止的容器 docker start 容器ID 或 容器名

docker start a9cb7535c278

3.5 docker restart

重启容器 docker restart 容器ID 或 容器名

docker restart a9cb7535c278

3.6 docker stop

停止容器 docker stop 容器ID 或 容器名

docker stop a9cb7535c278

3.7 docker kill

强制停止容器 docker kill 容器ID 或 容器名

docker kill a9cb7535c278

3.8 docker rm

删除 docker rm 容器ID 或 容器名

#删除已停止容器
docker rm a7d01a5cbebb

#强制删除容器
docker rm -f elastic_lumiere

#强制删除所有容器
docker rm -f $(docker ps -aq)

#强制删除所有容器
docker ps -a -q|xargs docker rm -f

3.9 与正在运行的容器交互

启动一个 redis ,并后台运行

docker run -d redis:6.0.8

exec 登入,启动新的进程连接,exit 后,容器不会停止

#登入 exec 是执行容器命令 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
#docker exec nginx01 nginx -s reload 容器内 nginx 重新加载配置文件
docker exec -it 15f363022ca6 /bin/bash

#登入并执行 redis-cli
docker exec -it 15f363022ca6 redis-cli

attach 登入,exit 后,容器停止

docker attach 15f363022ca6

3.10 容器和主机文件互传

docker cp 容器ID:容器内路径 目的主机路径

#容器内文件拷贝到本地
docker cp dac0e6def6d4:/home/hello.txt /root/data/

#本地拷贝到容器内
docker cp /root/data/abc.txt dac0e6def6d4:/home/abc.txt 

#导出容器内容作为一个归档文件
docker export dac0e6def6d4 > ctos.tar.gz

#删除所有镜像
docker rmi -f $(docker images -qa)

#从包内容创建一个新的文件系统再导入为镜像
cat ctos.tar.gz | docker import - alamide/centos:centos7

#登入,可以看到 /home/abc.txt /home/hello.txt
docker run -it alamide/centos:centos7 /bin/bash

3.11 一些其它

以下都可以使用容器 ID 或 容器名

#查看容器日志
docker logs 6e9f053094ce
docker logs awesome_darwin

#查看容器内进程
docker top 6e9f053094ce

#查看容器内部细节
docker inspect 6e9f053094ce

4.数据卷

Docker 可以通过容器卷来完成主机和容器数据共享

通过 -v 来实现,-v 主机目录:容器目录

docker run \
    --name nginx80 \
    --network inner-network \
    -v /opt/docker-volume/nginx/logs:/var/log/nginx \
    -v /opt/docker-volume/nginx/conf:/etc/nginx/conf.d:ro \
    -v /opt/docker-volume/nginx/www:/usr/share/nginx/www:ro \
    -p 80:80 \
    -d nginx:1.24

5.Docker 网络

Docker 容器间通信可以使用 IP 来通信,但是因为 IP 地址是 Docker 默认分配的,可能会变更,所以可以使用 Docker 的 network 来解决

创建一个网络

docker network create inner-network

使用已定义的网络创建一个 MySQL 容器

docker run -p 3306:3306 \
    --network inner-network \
    --name mysql3306\
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=db03 \
    -d mysql:5.7
docker exec -it mysql3306 bash

mysql -uroot -proot

use db03;
create table test (id int primary key auto_increment, name varchar(20));
insert into test values (null, "zhangsan"), (null, "lisi");

创建微服务,可以使用 mysql3306 来访问数据库

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://mysql3306:3306/db03

启动微服务

docker run --name server8007 --network inner-network -p 8007:8007 -d cc57abef6ed8

可以访问数据库成功

查看网络

#查看
docker network ls

#查看
docker network inspect inner-network

#移除
docker network rm inner-network
Tags: docker - container
~ belongs to alamide@163.com