一. 安装Docker
cat /etc/redhat-release //查看内核linux版本
CentOS Linux release 7.4.1708 (Core)
systemctl stop firewalld //关闭防火墙
systemctl disable firewalld //关闭防火墙开机自启
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
CentOS安装Docker步骤如下:
# 添加YUM源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 安装Docker CE最新版
yum install docker-ce -y
# 启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
二.配置加速器
Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker默认从这个公共镜像库下载镜像。
网站地址:https://hub.docker.com
但该网站服务器在国外,国内下载镜像会比较慢,因此可以配置加速器(这里是阿里云的)进行提速,配置如下:
~]# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
~]# systemctl restart docker
我的加速器地址:
进入阿里云-控制台-搜索容器镜像服务-点击进入镜像工具→镜像加速器能看到加速器地址,点击复制备用
https://l46jfbpz.mirror.aliyuncs.com
docker info 查看配置是否成功
三 .Docker镜像管理命令
示例:
# 查看本地镜像
docker image ls
# 删除本地镜像
docker image rm <镜像名称或ID> docker rmi -f 强制
# 导出本地镜像到归档文件
docker image save <镜像名称或ID> -o img.tar
# 导入归档文件到本地
docker image load -i img.tar
docker image inspect 镜像名 //查看镜像具体配置详情
docker pull 拉取镜像
四.容器管理
命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-i, –interactive 交互式
-t, –tty 分配一个伪终端
-d, –detach 运行容器到后台
-e, –env 设置环境变量
-p, –publish list 发布容器端口到主机
--name string 指定容器名称
-h, –hostname 设置容器主机名
--ip string 指定容器IP,只能用于自定义网络
--network 连接容器到一个网络
-v, –volume list --mount
mount(新方式) 将文件系统附加到容器
--restart string 容器退出时重启策略,默认no,可选值:[always|on-failure]
# 创建容器并设置自启动
docker run -d --name=web -p 88:80 --restart=always nginx:1.22
命令格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-m,–memory 容器可以使用的最大内存量
--cpus 可以使用的CPU数量
–cpuset-cpus 限制容器使用特定的CPU核心,如(0-3, 0,1)
docker run -it centos /bin/bash 后面的 bin/bash的作用
后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
容器管理命令
命令格式:docker container COMMAND
ps/ls 列出容器
inspect 查看一个或多个容器详细信息
exec 在运行容器中执行命令
cp 拷贝文件/文件夹到一个容器
logs 获取一个容器日志
stats 显示容器资源使用统计
stop/start/restart 停止/启动一个或多个容器
rm 删除一个或多个容器
# 列出所有容器(包括已停止的)
docker container ps -a
# 查看容器日志
docker container logs <容器名称或ID>
# 查看容器资源使用
docker container stats <容器名称或ID>
容器规则一个容器运行一个服务
容器是临时性的
容器被频繁重建
五.容器数据持久化
# 创建数据卷
~]# docker volume create nginx-vol
~]# docker volume ls
~]# docker volume inspect nginx-vol
# 使用数据卷
~]# docker run -d \
--name=nginx-test \
--mount src=nginx-vol,dst=/usr/share/nginx/html \
nginx
或
~]# docker run -d \
--name=nginx-test \
-v nginx-vol:/usr/share/nginx/html \
nginx
RUN --mount=[type=<TYPE>][,option=<value>[,option=<value>]...]
这里--mount挂载的类型一共有五种:
bind(default) 用于挂载一个上下文目录
cache 主要用于挂载一个临时目录来缓存编译器和包管理器的目录。
tmpfs 主要用于挂载一个tmpfs
secret 允许构建容器访问诸如私钥之类的安全文件,并且此类文件不会出现在构建好的镜像中,避免密钥外泄。
ssh 允许构建容器通过SSH代理访问SSH密钥,并支持密码短语
本篇介绍第一种挂载方式 --mount=type=bind
在官方文档中,对bind类型挂载的释义是 "这种挂载类型允许将上下文或镜像中的目录(只读)绑定到正在构建容器" 。这里有三个需要注意的点:
由于RUN指令是容器构建阶段生效运行,所以挂载的目录也仅仅在构建阶段可以访问。
由于不同的RUN指令会创建新的层,所以只有同一个RUN指令中,才可以访问挂载的目录。
仅支持挂载上下文或者引用的镜像中存在的目录,不能挂载宿主机上的目录,或者上下文以及镜像中不存在的目录(就算挂载上也没有任何意义)。
举个栗子:
先创建一个基础镜像basebind,并在/base下新建一个baseinfo.txt文档
basebind:dockerfile
FROM alpine
WORKDIR /base
RUN echo 'this is base image,got it!' >> baseinfo.txt
我们在创建另一个镜像baseref的时候,将basebind镜像中的/base目录挂载到当前镜像的/ref目录
baseref:dockerfile
FROM alpine
WORKDIR /ref
# 将镜像bindbase中的/base目录挂载到/ref,并将挂载过来的文件复制到根目录中,重命名为refinfo.txt
RUN --mount=type=bind,target=/ref,from=bindbase,source=/base \
cp baseinfo.txt /refinfo.txt
我们运行bindref镜像后,可以看到在我们成功的将挂载过来的文件复制到了容器根目录中
docker run -it bindref
/ref # ls
/ref # cd /
/ # ls
bin home mnt ref run sys var
dev lib opt refinfo.txt sbin tmp
etc media proc root srv usr
/ # cat refinfo.txt
this is base image,got it