1. 前言
容器化部署在现代服务器部署中的地位越来越重要了,而docker作为容器化的管理工具,无疑是相当受欢迎的。今天在这里,就从0到1 来讲述下常用docker命令,以及方法
2. 合适人员
- 马上毕业的大学生
- 初入职场的后端开发人员
- 以及需要适当接触服务的前端开发人员
3. 开始
3.1 安装
3.1.1 配置镜像
为了能在安装过程中提高速度,我们一般会选择一些别的镜像源,比如:阿里云。其实可以理解为npm的淘宝源,以及maven 等阿里源
- 查看源文件
ls -lh /etc/yum.repos.d/
- 设置源
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.1.2 开始安装
最简单的办法可以参照官网 来一步一步执行。但是这里我也会写出来。 按照我的步骤跟官网是保持一致的。
- 先尝试删除 之前安装的docker。如果之前没有安装过,此步骤可以跳过
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 直接安装需要的插件
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 启动服务
sudo systemctl start docker
- 查看版本
sudo docker version
- 看到下面的图片 表示安装成功
3.1.3 其余的命令
- 停止服务
sudo systemctl start docker
- 重启服务
sudo systemctl restart docker
- 设置开机启动服务
sudo systemctl enable docker
3.2 镜像管理
3.2.1 定义
什么是镜像呢???
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
- 在容器化的世界中,镜像是一切不可变的基础设施资源。 镜像可以理解为模板,如果要打包新的镜像,是需要在原来镜像之上进行打包的
- 既然镜像类似一种模板,那么就会有存储模板的地方。一般就是我们的docker官方源
- 当然既然可以存在官方源,我们也可以搭建自己的私有源。 那么一切的镜像都是从源中获取的
3.2.2 命令
- 镜像的帮助查询
docker images -h
- 本地镜像列表
docker images
- 镜像搜索
docker search nginx
- 镜像下载
docker images [name][:tag]
- 删除镜像
docker rmi [id]
# docker rmi d410f4167eea or docker rmi mysql:5.7
- 批量删除镜像
docker rmi $(docker images -aq)
- 镜像
commit
以一个运行的容器为模板基础,打包成为另一个镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# docker commit --message='package image' 2cfc204817b5 nginx:v1
- 镜像保存
docker save [OPTIONS] IMAGE [IMAGE...]
# docker save -o /tmp/docker/nginx-v1.tar nginx:v1
- 镜像加载
load
docker load [OPTIONS]
# docker load -i nginx-v1.tar
3.3 容器管理
3.3.1 基本参数
options | 说明 |
---|---|
--name | “容器新名字”: 为容器指定一个名称 |
-d | 后台运行容器,并返回容器 ID,也即启动守护式容器 |
-i | 以交互模式运行容器,通常与 -t 同时使用 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-P: | 随机端口映射 |
-p | 指定端口映射,有以下四种格式 ip:hostPort:containerPortip::containerPorthostPort:containerPort containerPort |
3.3.2 命令场景
下列如果使用到id的时候,不一定要全的,保证唯一就行
- 查看启动的容器列表
docker ps
- 关闭容器
docker stop [ID]
# docker stop 2cf
- 删除容器
docker rm [ID]
# docker rm 2cf
- 启动容器
docker start [ID]
# docker start 2cf
- 批量删除容器
docker rm $(docker ps -aq)
- 以
-d
形式运行一个镜像(后台模式运行)
docker run -d --name nginx nginx:latest
- 查询运行容器的详情
docker inspect [ID]
# docker inspect 91
exec
进入容器
docker exec -it [ID] bash
# docker exec -it 91 bash
-
退出容器
- 方式1:
$ exit
退出容器,并且关闭容器(不是每次都会关闭容器)。- 如果是创建容器,并且直接
-it
进入容器后,执行exit
后,会关闭容器。 - 如果是以
-d
的形式创建容器,然后再次进入容器后,执行exit
后,不会关闭容器
- 如果是创建容器,并且直接
- 方式2:
Ctrl + P + Q
直接退出容器
- 方式1:
-
以外部的形式 执行容器命令
docker exec -it [ID] [command]
# docker exec -it 9d ls
3.4 持久化管理
为什么docker需要持久化技术。 因为容器化技术是一种虚拟技术,我们可以创建容器,同样可以销毁容器,当我们修改容器中的内容,销毁容器后,之前修改的内容是无法保存的。会随着容器的销毁而消失。所以我们需要持久化技术来对数据进行管理,下面会列举出三种持久化实现方式:
3.4.1 -v
配置
docker run -d --name nginx_server_v -v /opt/nginx_server_v:/usr/share/nginx/html -p 8080:80 nginx
-v
表示数据卷的挂载。A:B
标识A 表示宿主机的地址。 标识B 表示容器的地址。指定文件地址后,无论是宿主机还是容器将共享一个地址- 当设置共享后,无论是宿主机还是容器修改文件,两边都是同步的
3.4.2 --mount
配置
3.4.2.1 volume
- 数据卷帮助文档
docker volume -h
volume
列表
docker volume ls
- 查看数据卷 详情
docker inspect [ID]/[name]
# docker inspect nginx-v1
- 生成数据卷
docker volume create [name]
# docker volume create v1
- 删除数据卷
docker volume rm [name]
# docker volume rm v1
3.4.2.2 --mount
docker run -d --name web1 --mount src=v1,dst=/usr/share/nginx/html nginx:latest
通过上述代码执行后,容器中共享内容会同步到宿主环境中。 但是其余的持久化方式不会同步。(其余的持久化技术共享后 宿主环境中文件夹仍然是空的)
3.4.3 bind
配置
docker run -d --name web5 --mount type=bind,src=/opt/web5root,dst=/usr/share/nginx/html nginx:latest
其实参数大致跟3.4.2保持一致,只不过可以更加灵活的指定目录
3.5 网络管理
3.5.1 网络基本模型
模式 | 使用方法 | 说明 |
---|---|---|
bridge [桥接式网络(Bridge container A)] | –network bridge | 桥接容器,除了有一块本地回环接口(Loopback interface)外,还有一块私有接口(Private interface)通过容器虚拟接口(Container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。 桥接网卡默认会分配到172.17.0.0/16的IP地址段。 如果我们在创建容器时没有指定网络模型,默认就是(Nat)桥接网络,这也就是为什么我们在登录到一个容器后,发现IP地址段都在172.17.0.0/16网段的原因。 |
host [开放式容器(Open container)] | –network host | 比联盟式网络更开放,我们知道联盟式网络是多个容器共享网络(Net),而开放式容器(Open contaner)就直接共享了宿主机的名称空间。因此物理网卡有多少个,那么该容器就能看到多少网卡信息。我们可以说Open container是联盟式容器的衍生。 |
none [封闭式网络(Closed container)] | –network none | 封闭式容器,只有本地回环接口(Loopback interface,和咱们服务器看到的lo接口类似),无法与外界进行通信。 |
container [联盟式网络(Joined container A | Joined container B ] | –network container:c1(容器名称或容器ID) | 每个容器都各有一部分名称空间(Mount,PID,User),另外一部分名称空间是共享的(UTS,Net,IPC)。 由于它们的网络是共享的,因此各个容器可以通过本地回环接口(Loopback interface)进行通信。 除了共享同一组本地回环接口(Loopback interface)外,还有一块一块私有接口(Private interface)通过联合容器虚拟接口(Joined container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。 |
3.5.2 网络基本命令
- 网络帮助文档
docker network -h
- 网络列表
docker network ls
- 网络详情
docker inspect bridge
- 其实还是可以通过上述的命令来查询有哪些容器使用了网络。
- 还可以创建容器的时候 指定网络
3.6 DockerFile
DockerFile 是用来构建 Docker 镜像的
构建文件
,是由一系列命令
和参数
构成的脚本
。
3.6.1 基本流程
- docker 从基础镜像运行一个容器
- 执行一条指令并对容器作出修改
- 执行类似 docker commit 的操作提交一个新的镜像层
- docker 再基于刚提交的镜像运行一个新的容器
- 执行 dockerfile 中的下一条指令直到所有指令都执行完成
3.6.2 编写Dockerfile 参数
指令 | 说明 |
---|---|
FROM | 基础镜像,当前新镜像是基于哪个镜像的,有继承的意味 |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 容器构建时需要运行的命令 |
EXPOSE | 当前容器对外暴露的端口 |
WORKDIR | 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包 |
COPY | 类似 ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 COPY src dest COPY [“src”,“dest”] |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数 |
ONBUILD | 当构建一个被继承的 Dockerfile 时运行命令,父镜像在被子继承后父镜像的 onbuild 被触发 |
3.6.3 根据Dockerfile 构建镜像
docker build -f dockerfile名称 -t 新建的镜像名:TAG .
4. 结束
- 上述内容就是针对
docker
大致总结。 后续想到新的docker知识还是会不停的补充.。- 如果您觉得这边文章对您有作用,麻烦点击收藏。后续会不断的更新,填充。
- 如果您觉得有遗留 或是 有想知道的,欢迎在评论区留言,秒回哦