docker的常见命令及概念

目录

docker命令

常见命令

命令别名

数据卷

数据卷命令

数据卷挂载

镜像

镜像结构

Dockerfile

构建镜像

网络


docker命令

常见命令

默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

用一副图来表示这些命令的关系,如下图所示:

左边是操作镜像相关命令,右边是操作容器相关命令。

命令别名

常用Docker命令起别名,方便我们访问:

首先,进入/root/.bashrc文件

vi /root/.bashrc

然后,添加下列别名(按下键盘的i键,进入编辑模式,然后添加,按下Esc,在输入“:wq”即可)

alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

最后,执行命令使别名生效

source /root/.bashrc

dps简化了对于容器的信息的筛选,dis简化了对于镜像信息的筛选。

数据卷

数据卷是一个虚拟目录,是容器内目录和宿主机目录之间映射的桥梁。

数据卷用于容器间共享数据,提供持久化存储,确保数据独立于容器生命周期存在

数据卷命令

数据卷的相关命令有:

注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。

所有,我们通常是使用docker run时,创建数据卷。

数据卷挂载

演示一下nginx的html目录挂载:

# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER    VOLUME NAME
local     29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local     html

# 3.查看数据卷详情
docker volume inspect html
# 结果
[
    {
        "CreatedAt": "2024-05-17T19:57:08+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/html/_data",
        "Name": "html",
        "Options": null,
        "Scope": "local"
    }
]

# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html

# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html

# 6.打开页面,查看效果

# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash

效果如下:(访问虚拟机地址即可看到:改变虚拟机的nginx,宿主机也变了)

数据卷本地挂载

数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。

# 1.删除原来的MySQL容器
docker rm -f mysql

# 2.进入root目录
cd ~

# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  mysql

# 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
ls -l mysql
# 结果:
总用量 4
drwxr-xr-x. 2 root    root   20 5月  19 15:11 conf
drwxr-xr-x. 7 polkitd root 4096 5月  19 15:11 data
drwxr-xr-x. 2 root    root   23 5月  19 15:11 init


镜像

镜像结构

我们打包镜像也是分成这么几步:

  1. 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
  2. 安装并配置JDK
  3. 拷贝jar包
  4. 配置启动脚本

上述步骤中的每一次操作其实都是在生产一些文件(系统运行环境、函数库、配置最终都是磁盘文件),所以镜像就是一堆文件的集合

Dockerfile

由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。

Dockerfile语法

制作JDK镜像

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

构建镜像

当Dockerfile文件写好以后,就可以利用命令来构建镜像了。

  1. docker build : 就是构建一个docker镜像

  2. -t docker-demo:1.0-t参数是指定镜像的名称(repositorytag

  3. . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录:

# 直接指定Dockerfile目录
docker build -t docker-demo:1.0 /root/demo

网络

docker网络常见命令

自定义网络的优势:无需记住IP地址也可以实现容器互联。

在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身

在同一个自定义网络中的容器,可以通过别名互相访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值