前言
感谢b站狂神,这篇是看视频时的笔记,同时参考了官方文档,文章中部分内容可能翻译的不是很准确,如若有的话请指出。另外,狂神的价值观我很认可,那些努力为自己梦想而奋斗的人啊!加油啊!趁着现在还年轻!还有着大把的时间可以挥霍尝试!
1.Docker 概述
1.1what ?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。
- docker官网:https://www.docker.com/
- docker官方文档:https://docs.docker.com/
- docker官方仓库:https://hub.docker.com/
1.2 why?
docker和vm一样,同为虚拟化技术,但docker十分轻巧,它占用的空间少于VM(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要的VM和操作系统更少。这也是docker火的原因之一。
- VM模拟的是完整的系统,需要虚拟出一套支撑系统运行的完整硬件,启动缓慢,占用内存非常大。
- Docker模拟的不是完整的系统,容器内的应用直接运行在宿主机的内核之上且每个容器都是互相隔离的,每个容器都有自己的文件系统。启动时间为秒级,占用内存为MB级,可以充分发挥服务器的性能。
1.3 how?
Docker三要素为容器(container)、镜像(image)、仓库(registry)。
- 镜像:是一个只读的模板,相当于类,通过镜像可以创建多个容器。就好比使用类创建多个对象。可以简单理解为 镜像—>类,容器—>对象
- 容器 :由镜像所创建,相当于一个对象,服务或项目就是运行在容器之中的。 是一个独立的文件系统
- 仓库:存放镜像的位置。官方的仓库为docker hub,国内也有较多的仓库,如阿里云。
docker是一个CS(client-server)结构的系统,用户通过客户端来操作后台的守护进程,从而操作主机上的Docker-cerver。
2.Docker安装
Docker在mac、windows、linux上都可以安装,这里仅讲述在linux中安装。如需其它,可以查看官方帮助文档:https://docs.docker.com/engine/install
2.1 自动安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.2 Ubuntu手动安装
docker支持以下版本的ubuntu版本(x86_64 、amd64、 armhf、 arm64)
Ubuntu Focal 20.04 (LTS)
Ubuntu Bionic 18.04 (LTS)
Ubuntu Xenial 16.04 (LTS)
-
注意如果已经含有旧版本的docker请先执行下面的命令来卸载旧版本的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
-
更新apt软件源
sudo apt update
-
允许apt通过HTTPS使用存储库
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
-
添加Docker的阿里云GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
-
设置docker的稳定存储库
# x86/amd64 这里使用的是阿里云的docker仓库 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
-
再次更新apt源
sudo apt update
-
安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
-
设置docker自启动
sudo systemctl enable docker.service
-
如果当前用户不是root,请执行以下命令讲当前用户加入到docker用户组中
sudo groupadd docker sudo usermod -aG docker ${USER} sudo systemctl restart docker newgrp - docker
-
检查是否安装
# 查看docker版本 docker -v #输出类似下方内容表示安装成功 Docker version 20.10.2, build 2291f61
2.3 Centos7手动安装
-
安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
-
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新
sudo yum makecache fast
-
安装docker
sudo yum -y install docker-ce docker-ce-cli containerd.io
-
启动docker
sudo systemctl enable --now docker
- systemctl:管理系统进程
- enables:设置开机启动
- –now:现在启动
- docker:启动的进程名称
-
检查是否安装
# 查看docker版本 docker -v #输出类似下方内容表示安装成功 Docker version 20.10.2, build 2291f61
2.4使用镜像加速器
由于Docker默认的仓库是使用官方的仓库,而官方仓库是在国外,所以网速非常慢。因此我们使用阿里云的镜像加速器。
- 注册或登录阿里云账号
- 阿里云docker镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors ,登录之后在左侧就可以看到镜像加速器,点击,然后根据提示将自己的加速器地址配置到本地即可
至此,Docker安装完成,若安装失败请先查看失败原因,重装或查看官方帮助文档:https://docs.docker.com/engine/install
# 3.Docker命令
docker命令的官方详细教程文档:https://docs.docker.com/reference/
3.1 常用命令
3.1.1 查看docker版本
docker version
输出
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.41
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:17:32 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.2
……
……
……
3.1.2 查看Docker系统信息
docker info
输出
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
Server:
Containers: 2
Running: 1
Paused: 0
………
……
…
3.1.3 查看命令帮助
docker 命令 --help
## 3.2镜像命令
3.2.1 搜索镜像
命令
docker search [OPTIONS] TERM
参数
参数 | 描述 |
---|---|
--filter , -f | 根据提供的条件筛选后输出 |
--format | 进行格式化展示 |
--limit | 最大搜索结果,默认25条 |
--no-trunc | 不截断输出 |
Example
rabbit•~•»»» docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10471 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3894 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 768 [OK]
percona Percona Server is a fork of the MySQL relati… 526 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 87
mysql/mysql-cluster Exper
3.2.2 查看本地镜像
命令
docker images [OPTIONS] [REPOSITORY[:TAG]]
参数
参数 | 描述 |
---|---|
--all , -a | 显示所有镜像 |
--digests | 显示摘要 |
--filter , -f | 根据提供的条件筛选后输出 |
--format | 进行格式化展示 |
--no-trunc | 不截断输出 |
--quiet , -q | 仅显示镜像ID |
Example
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 2 weeks ago 546MB
bestwu/qq office f429bf9a4ac4 4 weeks ago 902MB
bestwu/wechat latest dc95baea4912 4 weeks ago 864MB
centos 7 8652b9f0cb4c 2 months ago 204MB
- repository: 镜像网站/镜像名称
- tag: 镜像版本/标签
- image id: 镜像id
- created:镜像源创建时间
- size:镜像大小
3.2.3 下载镜像
命令
docker pull 镜像:版本号 # 指定版本号
docker pull 镜像 # 默认是最新版本
Example
rabbit•~•»»»docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete
14428a6d4bcd: Pull complete
2c2d948710f2: Pull complete
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
3.2.4 删除镜像
命令
docker rmi -f 镜像ID/镜像名称 # 删除指定镜像
docker rmi -f $(docker images -aq) # 删除全部镜像
Example
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 2 weeks ago 546MB
bestwu/qq office f429bf9a4ac4 4 weeks ago 902MB
bestwu/wechat latest dc95baea4912 4 weeks ago 864MB
ubuntu latest f643c72bc252 2 months ago 72.9MB
centos 7 8652b9f0cb4c 2 months ago 204MB
rabbit•~•»»»docker rmi -f f643c72bc252
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Deleted: sha256:f643c72bc25212974c16f3348b3a898b1ec1eb13ec1539e10a103e6e217eb2f1
Deleted: sha256:9386795d450ce06c6819c8bc5eff8daa71d47ccb9f9fb8d49fe1ccfb5fb3edbe
Deleted: sha256:3779241fda7b1caf03964626c3503e930f2f19a5ffaba6f4b4ad21fd38df3b6b
Deleted: sha256:bacd3af13903e13a43fe87b6944acd1ff21024132aad6e74b4452d984fb1a99a
3.3 容器命令
3.3.1 创建容器(重点)
命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数
说明:docker run 的参数多达几十种,这里仅介绍常用参数,更多参数介绍请使用 --help 或直达官方docke run 帮助文档:https://docs.docker.com/engine/reference/commandline/run/
参数 | 示例/详细 | 描述 |
---|---|---|
–name | –name=mysql1 | 指定容器名称 |
- d | 放置后台运行 | |
-i | 交互模式 | |
-t | -it | 启动终端,常与-i组合使用 |
-p | 指定端口 | |
-p ip:主机端口:容器端口 | 端口映射1 | |
-p 主机端口:容器端口 | 端口映射2 | |
-p 容器端口 | 指定容器端口 | |
-P | 随机指定端口 | |
-e | 环境配置 | |
-v | 数据卷挂载(后面会讲到) |
Example
# 创建一个名字为centos_test的centos7的容器,并直接进入后台
rabbit•~•»»»docker run -it --name centos_test centos:7 /bin/bash
[root@6c93d967edd3 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
3.3.2退出容器
-
停止并退出容器
root@ed09e4490c57:/# exit
3.3.3查看容器
命令
docker ps [OPTIONS]
参数
参数 | 默认值 | 描述 |
---|---|---|
--all , -a | 显示所有的容器 | |
--filter , -f | 根据提供的条件筛选后输出 | |
--format | 进行格式化展示 | |
--last , -n | 1 | 显示最后创建的容器(包括所有容器) |
--latest , -l | 显示最新创建的容器(包括所有容器) | |
--no-trunc | 不间断输出 | |
--quiet , -q | 仅显示容器ID | |
--size , -s | 显示容器大小 |
3.3.4 删除容器
命令
docker rm [OPTIONS] CONTAINER [CONTAINER...]
参数
参数 | 描述 |
---|---|
--force , -f | 强制删除所有容器 |
--link , -l | 删除指定的链接 |
--volumes , -v | 删除与容器关联的匿名卷 |
Example
rabbit•~•»»»docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5dfadbfaf166 centos:7 "/bin/bash" 10 seconds ago Up 9 seconds centos3
a40c7e77eecb centos:7 "/bin/bash" 16 seconds ago Up 14 seconds centos2
60a7d3d88b21 centos:7 "/bin/bash" 21 seconds ago Up 20 seconds centos1
rabbit•~•»»»docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5dfadbfaf166 centos:7 "/bin/bash" 18 seconds ago Up 18 seconds centos3
a40c7e77eecb centos:7 "/bin/bash" 24 seconds ago Up 23 seconds centos2
60a7d3d88b21 centos:7 "/bin/bash" 29 seconds ago Up 28 seconds centos1
rabbit•~•»»»docker rm -f centos3
centos3
rabbit•~•»»»docker rm -f $(docker ps -aq)
a40c7e77eecb
60a7d3d88b21
3.3.5 进入容器
命令
docker exec -it 容器ID
Example
rabbit•~•»»»docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64b9f94d1adb centos:7 "/bin/bash" 37 minutes ago Up 37 minutes centos3
rabbit•~•»»»docker exec -it 64b9f94d1adb /bin/bash
[root@64b9f94d1adb /]#
3.3.6 停止/启动/重启容器
docker start 容器ID/容器名称 # 启动
docker stop 容器ID/容器名称 # 停止
docker restart 容器ID/容器名称 # 重启
## 3.4 其它命令
3.4.1 查看日志
命令
docker logs [OPTIONS] CONTAINER
参数
参数 | 默认值 | 描述 |
---|---|---|
--details | 显示提供给日志的额外详细信息 | |
--follow , -f | 跟踪日志输出 | |
--since | 显示自时间戳(例如2013-01-02T13:23:37Z)或相对(例如42m, 42分钟)以来的日志 | |
--tail , -n | 从日志的末尾开始显示行数(后需要加上参数) | |
--timestamps , -t | 显示时间戳 | |
--until | 显示时间戳之前的日志(例如2013-01-02T13:23:37Z)或相对的日志(例如42m for 42 minutes) |
3.4.2 查看容器进程
命令
docker top CONTAINER [ps OPTIONS]
Example
rabbit•~•»»»docker top 64b9f94d1adb
UID PID PPID C STIME TTY TIME CMD
root 7848 7826 0 13:55 ? 00:00:00 /bin/bash
3.4.3 查看镜像的元数据
命令
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
参数
参数 | 描述 |
---|---|
--format , -f | 根据给出的模板格化输出 |
--size , -s | 显示容器大小 |
--type | 返回指定类型的JSON |
Example
rabbit•~•»»»docker inspect 64b9f94d1adb
[
{
"Id": "64b9f94d1adb67e797e8537ad8a1641fbd8953ec2d9629f1a4a336fc46068748",
"Created": "2021-02-08T05:55:36.648918967Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 7848,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-02-08T05:55:36.994219512Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
……
……
……
3.4.4 文件传输
命令
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 从容器cp到主机
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH # 从主机cp到容器
Example
# 从主机cp到容器
rabbit•~•»»»docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64b9f94d1adb centos:7 "/bin/bash" 49 minutes ago Up 49 minutes centos3
rabbit•~•»»»docker cp 01_hello.sh 64b9f94d1adb:/root/
rabbit•~•»»»docker exec -it 64b9f94d1adb /bin/bash
[root@64b9f94d1adb /]# cd /root/
[root@64b9f94d1adb ~]# ls
01_hello.sh anaconda-ks.cfg
# 从容器cp到主机
[root@64b9f94d1adb ~]# vi a.txt
[root@64b9f94d1adb ~]# ls
01_hello.sh a.txt anaconda-ks.cfg
[root@64b9f94d1adb ~]# exit
exit
rabbit•~•»»»docker cp 64b9f94d1adb:/root/a.text .
rabbit•~•»»»ls
a.txt
3.4.5 打包容器
命令
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
参数
参数 | 默认值 | 描述 |
---|---|---|
--author , -a | 作者 | |
--change , -c | 添加Dockerfile用来创建新的镜像 | |
--message , -m | 提交信息 | |
--pause , -p | true | 在提交过程中暂停容器 |
Example
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest c8562eaf9d81 2 weeks ago 546MB
tomcat latest 040bdb29ab37 3 weeks ago 649MB
nginx latest f6d0b4767a6c 3 weeks ago 133MB
bestwu/qq office f429bf9a4ac4 4 weeks ago 902MB
bestwu/wechat latest dc95baea4912 4 weeks ago 864MB
centos 7 8652b9f0cb4c 2 months ago 204MB
rabbit•~•»»»docker run -dit --name centos_1 centos:7 /bin/bash
rabbit•~•»»»docker exec -it centos_1 /bin/bash
[root@626b5733e8e1 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@626b5733e8e1 /]# vi testFile.txt
[root@626b5733e8e1 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys testFile.txt tmp usr var
[root@626b5733e8e1 /]# exit
exit
rabbit•~•»»»docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
626b5733e8e1 centos:7 "/bin/bash" 2 minutes ago Up 18 seconds centos_1
rabbit•~•»»»docker commit -a "rabbit" -m "commit a new centos:7 images" 626b5733e8e1 centos7:1.0
sha256:e80b6bff4707966ef5bddde23520dba5da9fb488cc26a209dd67050c6bb87b51
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 1.0 e80b6bff4707 9 seconds ago 204MB
mysql latest c8562eaf9d81 2 weeks ago 546MB
tomcat latest 040bdb29ab37 3 weeks ago 649MB
nginx latest f6d0b4767a6c 3 weeks ago 133MB
bestwu/qq office f429bf9a4ac4 4 weeks ago 902MB
bestwu/wechat latest dc95baea4912 4 weeks ago 864MB
centos 7 8652b9f0cb4c 2 months ago 204MB
4. 联合文件系统
Docker联合文件系统(Union File System),它是实现Docker镜像的技术基础,是一种轻量级的高性能分层文件系统,支持将文件系统中的修改进行提交和层层叠加,这个特性使得镜像可以通过分层实现和继承。同时支持将不同目录挂载到同一个虚拟文件系统下。
在Docker镜像分为基础镜像和父镜像,没有父镜像的镜像被称为基础镜像。用户是基于基础镜像来制作各种不同的应用镜像。这些应用镜像共享同一个基础镜像层,提高了存储效率。
当用户通过升级程序到新版本,改变了一个Docker镜像时,一个新的镜像层会被创建。因此,用户不用替换整个原镜像或者完全重新建立新镜像,只需要添加新层即可。在用户分发镜像的时,也只需要分发被改动的新层内容(增量部分)。这让Docker的镜像管理变得十分轻松级和快速。典型的案例就是docker commit
:每次打包都是在原有的镜像基础上添加一个新的镜像层,可以通过docker inspect
命令查看分层(Layers)
Example:
# 进入容器并下载Python3
rabbit•~•»»»docker exec -it centos_1 /bin/bash
[root@626b5733e8e1 /]# yum install -y python3
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
……
……
# 退出容器
[root@626b5733e8e1 /]#exit
# 打包镜像
rabbit•~•»»»docker commit -a "rabbit" -m "commit a new centos:7 images" 626b5733e8e1 centos7:1.0
# 查看镜像
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 1.0 76c2e84d2ea3 6 minutes ago 353MB # commit
centos 7 8652b9f0cb4c 2 months ago 204MB # pull
# 查看centos的 系统信息
rabbit•~•»»»docker inspect 8652b9f0cb4c
[
……
"Layers": [
"sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02"
]
……
]
#查看commit的centos7的系统信息
rabbit•~•»»»docker inspect 76c2e84d2ea3
[
……
"Layers": [
"sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02",
"sha256:72f71d0f186e0da2eaf87c7cb801afd9159440f8edbe58b543da33c6fdb0d7b9"
]
……
]
5.数据卷
5.1 了解数据卷
- 实现数据的持久化,将数据同步到容器外,容器结束后,数据仍然存在
- 容器之间可以共享数据
5.2 使用数据卷
5.2.1 指定路径挂载
命令
docker run -v 主机文件目录:容器文件目录 image /bin/bash
在容器运行时使用-v参数,实现宿主机指定目录与容器指定目录双向绑定。
Example
运行一个容器,并将其/home与宿主机/home/rabbit/test目录绑定。通过测试可以看出,实现了文件的双向同步。
练习:部署MySQL
rabbit•~•»»»docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 1.0 76c2e84d2ea3 27 hours ago 353MB
mysql latest c8562eaf9d81 3 weeks ago 546MB
tomcat latest 040bdb29ab37 3 weeks ago 649MB
rabbit•~•»»»docker run -dit --name mysql1 -v /home/mysql/cnfig:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
f90ffab02e11a94d2d50d9ed1f6145a4d1f3580b01cd33660c37a1c21a7b9265
# -dit 后台运行
# --name 容器名称
# -v 挂载目录
# -p 端口映射
# -e 配置信息
rabbit•/home/mysql•»»»cd data
rabbit•/home/mysql/data•»»»ls
auto.cnf binlog.index client-cert.pem '#ib_16384_0.dblwr' ibdata1 ibtmp1 mysql.ibd public_key.pem sys
binlog.000001 ca-key.pem client-key.pem '#ib_16384_1.dblwr' ib_logfile0 '#innodb_temp' performance_schema server-cert.pem undo_001
binlog.000002 ca.pem f90ffab02e11.err ib_buffer_pool ib_logfile1 mysql private_key.pem server-key.pem undo_002
-
测试链接
5.2.2 匿名挂载
在挂载数据卷的时候仅指定容器内的文件名称
docker run -v /etc/mysql
Example
# 创建mysql2, 匿名挂载容器目录 /etc/mysql 和/var/lib/mysql
rabbit•/home/mysql/data•»»»docker run -dit --name mysql2 -v /etc/mysql -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306 mysql /bin/bash
f18306ca3a252f59ebc827fcc16fa825cee2a9cc1db98bed8c5b14d03f52cb0f
# 查看docker volume命令
rabbit•/home/mysql/data•»»»docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
# 查看挂载的数据卷
rabbit•/home/mysql/data•»»»docker volume ls
DRIVER VOLUME NAME
local a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577
local ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81
# 查看挂载的数据卷的位置
rabbit•/home/mysql/data•»»»docker volume inspect a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577
[
{
"CreatedAt": "2021-02-10T10:30:19+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577/_data",
"Name": "a5018b6327d822d09cc6bc43763af5871c34935e4cae3652da3d14dc762d4577",
"Options": null,
"Scope": "local"
}
]
rabbit•/home/mysql/data•»»»docker volume inspect ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81
[
{
"CreatedAt": "2021-02-10T10:30:19+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81/_data",
"Name": "ae62c94221da7d9811f8eab5fb7602e71f5409fd4675f6844a31ef6ae1acac81",
"Options": null,
"Scope": "local"
}
]
5.2.3 具名挂载
给挂载的数据卷命名一个名称
命令
docker run -v 卷名:容器内路径
Example
# 创建数据库mysql3,具名挂载容器目录 etc/mysql 和/var/lib/mysql
rabbit•~•»»»docker run -dit --name mysql3 -v jumingguazai1:/etc/mysql -v jumingguazai2:/var/lib/mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql /bin/bash
59513c8cec5b78be7d58ffd455b267ffb71b3ecc83080fa79332019562f3d41a
# 查看数据卷
rabbit•~•»»»docker volume ls
DRIVER VOLUME NAME
local jumingguazai2
local jumingguazai1
# 查看数据卷jumingguazai1的详细信息
rabbit•~•»»»docker volume inspect jumingguazai1
[
{
"CreatedAt": "2021-02-10T10:44:52+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/jumingguazai1/_data",
"Name": "jumingguazai1",
"Options": null,
"Scope": "local"
}
]
# 查看数据卷jumingguazai2的详细信息
rabbit•~•»»»docker volume inspect jumingguazai2
[
{
"CreatedAt": "2021-02-10T10:44:52+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/jumingguazai2/_data",
"Name": "jumingguazai2",
"Options": null,
"Scope": "local"
}
]
5.2.4 权限设置
对容器内的文件权限进行设置,使得挂载的文件只能在宿主机中读写。
命令
docker run -v juming:/etc/mysql:ro mysql /bin/bash
docker run -v juming:/etc/mysql:rw mysql /bin/bash
6. Dockerfile
docker通过解释Dockerfile中的指令,可以来构建一个自定义的docker镜像。可以说Dockerfile是的一个命令参数脚本文件。docker中每执行一条指令,都会新建一层镜像。
6.1 构建Dockerfile
Dockerfile中的指令含义如下:
参数 | 描述 | 解释 |
---|---|---|
FROM | FROM centos:7 | 基础镜像,构建的镜像就是在此镜像基础上形成的 |
MAINTAINER | MAINTAINER rabbit< 1234567@qq.com > | 镜像作者,一般为: 作者+邮箱 |
RUN | 编译镜像是运行的脚本指令 | |
ENV | 容器的环境变量 | |
LABEL | 设置镜像的标签 | |
ONBUILD | 构建一个被继承的Dockerfile | |
USER | 指定 RUN CMD 等指定执行用户 | |
VOLUME | 挂载的数据卷 | |
WORKDIR | 镜像的工作目录 | |
COPY | ./readme.txt /usr/localreadme.txt | 编译镜像时复制文件到容器中 |
ADD | 编译镜像时复制文件到容器中(自动解压) | |
EXPOSE | 保留端口配置 | |
CMD | 指定容器启动后需要运行的命令(覆盖,仅最后一个有效) | |
ENTRYPOINT | 指定容器启动后需要运行的命令,不覆盖,可追加) |
6.2 使用docker build 运行(重点)
命令
docker build -f Dockerfile -t 目标镜像名称:版本号 生成路径
Example
#Dockerfile内容
FROM centos:7
MAINTAINER rabbit<1234567@qq.com>
ENV MYPATH /home
WORKDIR $MYPATH
RUN yum install vim -y
RUN yum install net-tools -y
EXPOSE 80
CMD echo "--------ok------------"
# 运行命令
rabbit•~/dockerfile•»»»docker build -f Dockerfile -t mycentos:7.1 .
Sending build context to Docker daemon 2.048kB
Step 1/8 : FROM centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
---> 8652b9f0cb4c
Step 2/8 : MAINTAINER rabbit<1234567@qq.com>
---> Running in a58b05fa8b1b
Removing intermediate container a58b05fa8b1b
---> 228d96fc7ab7
Step 3/8 : ENV MYPATH /home
---> Running in 5df54a4392ff
Removing intermediate container 5df54a4392ff
---> 5b42216713df
Step 4/8 : WORKDIR $MYPATH
---> Running in e4989809e670
Removing intermediate container e4989809e670
---> ee9f49f726c9
Step 5/8 : RUN yum install vim -y
……
……
……
Successfully built dc8102fdbb65
Successfully tagged mycentos:7.1
后记
转载请注明出处,感谢阅读!