一.常见命令
1.卸载旧版本docker
bash
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
2.配置docker的yum库并安装docker
bash
# 先看上面的教程
# 安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.启动校验
bash
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
4.配置镜像加速
bash
# 略
5.命令入门
bash
docker run -d \
--name mysql_rhm \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
解读:
docker run -d
:创建 并运行 一个容器,-d
则是让容器以后台进程运行,如果不加会卡在启动的程序里面,如果ctrl+c退出,这个容器也就不运行了。
--name`` mysql
: 给容器起个名字叫mysql_rhm
,也可以叫别的。
-p 3306:3306
: 设置端口映射。
容器是隔离环境 ,外界不可访问。但是可以将 宿主机 端口 映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的3306映射到容器内的3306端口。
-``e`` TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数
格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定。案例中,
TZ``=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置MySQL默认密码。
mysql
: 设置镜像名称 ,Docker会根据这个名字搜索 并下载镜像
格式:
REPOSITORY:TAG
,例如mysql:8.0
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号。在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest。
6.基础命令
图解:

命令 | 说明 | 文档地址 |
---|---|---|
docker pull | 拉取镜像 | docker pull |
docker push | 推送镜像到DockerRegistry | docker push |
docker images | 查看本地有哪些镜像 | docker images |
docker rmi | 删除本地镜像(字母理解remove images) | docker rmi |
docker run | 创建并运行容器(不能重复创建) | docker run |
docker stop | 停止指定容器(但不销毁容器) | docker stop |
docker start | 启动指定容器(启动的是已存在的容器) | docker start |
docker restart | 重新启动容器 | docker restart |
docker rm | 删除指定容器 | docs.docker.com |
docker ps | 查看容器的运行状态(进程状态:Process State) | docker ps |
docker logs | 查看容器运行日志 | docker logs |
docker exec | 进入容器 | docker exec |
docker save | 保存镜像到本地压缩文件 | docker save |
docker load | 加载本地压缩文件到镜像 | docker load |
docker inspect | 查看容器详细信息 | docker inspect |
上面的命令后面加上 '--help' 这条指令,可以查看怎么添加选项
# 进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p (这后面mysql中进入mysql客户端的命令,不是docker中的)
# 退出
exit
# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
# 查看容器的详细信息,可以看挂载的数据卷,网络端口...
docker inspect 容器名
二.数据卷
1.数据卷命令
命令 | 说明 | 文档地址 |
---|---|---|
docker volume create | 创建数据卷 | docker volume create |
docker volume ls | 查看所有数据卷 | docs.docker.com |
docker volume rm | 删除指定数据卷 | docs.docker.com |
docker volume inspect | 查看某个数据卷的详情 | docs.docker.com |
docker volume prune | 清除数据卷 | docker volume prune |
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器是不能设置数据卷的 。而且创建容器的过程中,数据卷会自动创建。
下图是创建容器的时候挂载数据卷,以及一些指令的使用
只需要在创建容器的时候添加参数 " -v 数据卷名 : 容器内目录 " 即可。

使用指令仔细查看挂载的更具体的内容

2.挂在本地目录或文件
只需要在创建容器的时候添加参数 " -v 目录 : 容器内目录 " 即可。
容器目录都是指定的,这个需要在docker中去查找
注意:本地目录或文件必须以
/
或./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。
bash
# 创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql
# 第一个-v 是数据目录 ,第二个是配置文件,第三个是sql初始化脚本
三.镜像
1.dockerfile常用指令:
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./xx.jar /tmp/app.jar |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
2.构建镜像
①当Dockerfile文件写好以后,就可以利用命令来构建镜像了。
使用给的一个demo项目及对应的Dockerfile
②执行命令:
bash# 进入镜像目录 cd /root/demo # 开始构建 docker build -t docker-demo:1.0 .
命令说明:
docker build
: 就是构建一个docker镜像
-t docker-demo:1.0
:-t
参数是指定镜像的名称(repository
和tag
)
.
: 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.
代表当前目录,也可以直接指定Dockerfile目录:③然后尝试运行该镜像(前面讲过了)
bashdocker run -d --name dd -p 8080:8080 docker-demo:1.0
四.网络
不使用自定义网络存在的问题:可以通过容器运行时分配的ip地址,可以让容器之间相互访问,但是容器重启之后ip地址会改变,所以我们可以自己创建一个网络。
自定网络地优点:而且通过自定义的网络可以:在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身;在同一个自定义网络中的容器,可以通过别名或容器名互相访问,在非自定网络中是不可以使用容器名相互访问地。
命令 | 说明 | 文档地址 |
---|---|---|
docker network create | 创建一个网络 | docker network create |
docker network ls | 查看所有网络 | docs.docker.com |
docker network rm | 删除指定网络 | docs.docker.com |
docker network prune | 清除未使用的网络 | docs.docker.com |
docker network connect | 使指定容器连接加入某网络 | docs.docker.com |
docker network disconnect | 使指定容器连接离开某网络 | docker network disconnect |
docker network inspect | 查看网络详细信息 | docker network inspect |
bash
# 1.首先通过命令创建一个网络
docker network create rhm-network
# 2.然后查看网络
docker network ls
# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect rhm-network mysql --alias db
# 3.2.dd容器,也就是我们的java项目
docker network connect rhm-network dd
# 4.进入dd容器,尝试利用别名ping数据库
# 4.1.进入容器
docker exec -it dd bash
# 4.2.用db别名访问
ping db
# 4.3.用容器名访问
ping mysql