一.常见命令
1.卸载旧版本docker
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
# 先看上面的教程
# 安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.启动校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
4.配置镜像加速
# 略
5.命令入门
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 push |
推送镜像到DockerRegistry |
|
docker images |
查看本地有哪些镜像 |
|
docker rmi |
删除本地镜像(字母理解remove images) |
|
docker run |
创建并运行容器(不能重复创建) |
|
docker stop |
停止指定容器(但不销毁容器) |
|
docker start |
启动指定容器(启动的是已存在的容器) |
|
docker restart |
重新启动容器 |
|
docker rm |
删除指定容器 |
|
docker ps |
查看容器的运行状态(进程状态:Process State) |
|
docker logs |
查看容器运行日志 |
|
docker exec |
进入容器 |
|
docker save |
保存镜像到本地压缩文件 |
|
docker load |
加载本地压缩文件到镜像 |
|
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 ls |
查看所有数据卷 |
|
docker volume rm |
删除指定数据卷 |
|
docker volume inspect |
查看某个数据卷的详情 |
|
docker volume prune |
清除数据卷 |
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
下图是创建容器的时候挂载数据卷,以及一些指令的使用
只需要在创建容器的时候添加参数 “ -v 数据卷名 : 容器内目录 ” 即可。
使用指令仔细查看挂载的更具体的内容
2.挂在本地目录或文件
只需要在创建容器的时候添加参数 “ -v 目录 : 容器内目录 ” 即可。
容器目录都是指定的,这个需要在docker中去查找
注意:本地目录或文件必须以
/
或./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。
# 创建并运行新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 |
指定基础镜像 |
|
ENV |
设置环境变量,可在后面指令使用 |
|
COPY |
拷贝本地文件到镜像的指定目录 |
|
RUN |
执行Linux的shell命令,一般是安装过程的命令 |
|
EXPOSE |
指定容器运行时监听的端口,是给镜像使用者看的 |
EXPOSE 8080 |
ENTRYPOINT |
镜像中应用的启动命令,容器运行时调用 |
ENTRYPOINT java -jar xx.jar |
2.构建镜像
①当Dockerfile文件写好以后,就可以利用命令来构建镜像了。
使用给的一个demo项目及对应的Dockerfile
②执行命令:
# 进入镜像目录 cd /root/demo # 开始构建 docker build -t docker-demo:1.0 .
命令说明:
docker build
: 就是构建一个docker镜像
-t docker-demo:1.0
:-t
参数是指定镜像的名称(repository
和tag
)
.
: 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.
代表当前目录,也可以直接指定Dockerfile目录:③然后尝试运行该镜像(前面讲过了)
docker run -d --name dd -p 8080:8080 docker-demo:1.0
四.网络
不使用自定义网络存在的问题:可以通过容器运行时分配的ip地址,可以让容器之间相互访问,但是容器重启之后ip地址会改变,所以我们可以自己创建一个网络。
自定网络地优点:而且通过自定义的网络可以:在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身;在同一个自定义网络中的容器,可以通过别名或容器名互相访问,在非自定网络中是不可以使用容器名相互访问地。
命令 |
说明 |
文档地址 |
---|---|---|
docker network create |
创建一个网络 |
|
docker network ls |
查看所有网络 |
|
docker network rm |
删除指定网络 |
|
docker network prune |
清除未使用的网络 |
|
docker network connect |
使指定容器连接加入某网络 |
|
docker network disconnect |
使指定容器连接离开某网络 |
|
docker network inspect |
查看网络详细信息 |
# 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