系统相关
首页 > 系统相关> > centos7 上Docker 20.10的安装和配置使用

centos7 上Docker 20.10的安装和配置使用

作者:互联网

1. 安装

1.1 安装需要的软件包,yum-util 提供yum-config-manager功能

yum install -y yum-utils

1.2 设置docker软件的yum阿里云

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

1.3 安装docker

yum install docker-ce docker-ce-cli containerd.io

或者安装指定版本

yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

1.4 启动docker

systemctl start docker

2 测试是否正确安装

尝试运行 hello-world 的image.

docker run hello-world

3. 启动等相关命令(root用户下)

# 启动 docker
systemctl start docker
# 停止 docker
systemctl stop docker
# 重启 docker
systemctl restart docker
# 设置开机启动
systemctl enable docker
# 查看 docker 状态
systemctl status docker
# 查看docker内容器的运行状态
docker stats
查看 docker 概要信息
docker info
# 查看docker 帮助文档
docker --help
# 查看docker 版本
docker -v  
docker version

4 配置镜像加速

中国科学技术大学的开源镜像 https://docker.mirrors.ustc.edu.cn

网易的开源镜像: https://hub-mirror.c.163.com

4.1 编辑daemon.json

vim /etc/docker/daemon.json

没有这个文件则新建,在文件中输入一下内容并保存。

{
    "registry-mirrors": ["https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}

重新加载配置信息及重启 docker 服务

# 重新加载某个服务的配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker

5. docker 相关命令

5.1 镜像相关命令

镜像存放在docker宿主机的 /var/lib/docker目录下

# 查看镜像
docker images
# 搜索镜像
docker search 镜像名称
# 拉取镜像,默认拉取least 设置 redis:5 指定版本
docker pull 镜像名称
# 删除镜像
docker rmi 镜像ID

5.2 容器相关的命令

5.2.1 查看容器相关

# 查看容器
docker ps
# 查看停止的容器
docker ps -f status=exited
# 查看所有容器
docker ps -a
# 帮助
docker ps --help

5.2.2 创建与启动容器

docker run [options] IMAGE [command] [arg...]
5.2.2.1 创建并进入容器
docker run -it --name 容器名称 镜像名称:标签 /bin/bash

此命令表示: 通过镜像A创建容器B,运行并进入容器的/bin/bash

注意:docker 容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

例如

# 将容器命名为mynginx,将本机80端口映射到容器80端口上
docker run --name mynginx -p 80:80 nginx
# 将本机随机端口映射到容器暴露端口上
docker run --name mynginx -P nginx
# 运行进入命令行
docker run -it --name mycentos -P centos
5.2.2.2 守护方式创建容器
docker run -di --name 容器名称 镜像名称:标签

例如

# 后台运行
docker run -di --name mynginx -p 80:80 nginx

# 登录守护是容器方式
docker exec -it 容器名称|容器ID /bin/bash

5.2.3 停止与启动容器

# 停止容器
docker stop 容器名称|容器ID

# 启动容器
docker start 容器名称|容器ID

5.2.4 文件拷贝

# 文件拷贝到容器中
docker cp 需要拷贝的文件或目录 容器名称:容器目录

# 文件从容器中拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录

5.2.5 目录挂载(容器数据卷操作)

将宿主机目录与容器目录进行映射,两者之间相互影响,可实现备份功能

创建容器添加-v参数,格式为宿主机目录:容器目录,例如:

docker run -di -v /mydata/docker_data:/usr/local/data --name mycentos7 centos:7

# 多目录挂载
docker run -di -v /宿主目录:/容器目录 -v /宿主目录2:/容器目录2 镜像名

目录挂载操作可能出现权限不足的提示。这是因为CentOS7中的安全模块SELinux把权限禁掉了,在docker run 时通过-pricileged=true 给该容器加权限来解决挂载的目录没有权限的问题。

5.2.5.1 匿名挂载

匿名挂载只需要写容器目录即可,容器外对应的目录会在/var/lib/docker/volumes中生成

# 匿名挂载
docker run -di -v /usr/local/data --name centos7-01 centos:7

# 查看 volume 数据卷信息
docker volume ls
# 或者
ls /var/lib/docker/volumes/
5.2.5.2 具名挂载

具名挂载就是给数据卷起个名字,容器外对应的目录会在/var/lib/docker/volumes中生成

# 具名挂载
docker run -di -v docker_centos_data:/usr/local/data --name centos7-01 centos:7

# 查看 volume 数据卷信息
docker volume ls
5.2.5.3 指定目录挂载
docker run -di -v /mydata/docker_data:/usr/local/data --name centos7-02 centos:7
5.2.5.4 查看目录挂载关系

通过docker volume inspect 数据卷名称 可以查看改数据卷对应宿主机的目录

docker colume inspect docker_centos_data

通过docker inspect 容器ID或名称,查看容器详细配置信息,在返回json中找到Mounts,可以查看详细的数据挂载信息

5.2.5.5 只读 / 读写
# 只读:只能通过修改宿主机内容实现对容器的数据管理
docker run -it -v /宿主机目录:/容器目录:ro 镜像名

# 读写:默认。双向操作
docker run -it -v /宿主机目录:/容器目录:rw 镜像名
5.2.5.6 volumes-form (继承)
# 容器 centos7-01 指定目录挂载
docker run -di -v /mydata/centos_data:/usr/local/data --name centos7-01 centos:7

# 容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录
docker run -di --volumes-form centos7-01 --name centos7-04 centos:7
docker run -di --volumes-form centos7-01:rw --name centos7-05 centos:7

5.2.6 查看容器IP地址

查看容器的元信息

docker inspect 容器名称|容器ID

# 直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID

5.2.6 查看容器IP地址

# 容器要在停止运行的情况下
docker rm 容器名称|容器ID
# 删除多个容器
docker rm 容器名称|容器ID  容器名称|容器ID

6 docker 镜像构建

目标:通过centos:7基础镜像,安装jdk和tomcat以后,制作成一个新的镜像mycentos:7

6.1 通过docker commit 构建

6.1.1 创建容器

# 拉取镜像
docker pull centos:7
# 创建容器
docker run -di --name centos7 centos:7
6.1.2 拷贝资源
# 将宿主机的 jdk 和tomcat 拷贝到容器
docker cp jdk-8u291-linux-i586.tar.gz mycentos:/root
docker cp apache-tomcat-9.0.50.tar.gz mycentos:/root

6.1.3 安装资源

# 进入容器
docker exec -it mycentos bash
############# 以下命令均在容器中执行 #########
# 切换至 /root 目录下
[root@3c5ad09a5149 /]# cd /root/
[root@3c5ad09a5149 ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.50.tar.gz  jdk-8u291-linux-x64.tar.gz
# 创建java 和 tomcat 目录
[root@3c5ad09a5149 ~]# mkdir -p /usr/local/java
[root@3c5ad09a5149 ~]# mkdir -p /usr/local/tomcat
# 将jdk和tomcat解压至容器指定目录中
[root@3c5ad09a5149 ~]# tar -zxf jdk-8u291-linux-x64.tar.gz -C /usr/local/java/
[root@3c5ad09a5149 ~]# tar -zxf apache-tomcat-9.0.50.tar.gz -C /usr/local/tomcat/
# 配置jdk环境变量
[root@3c5ad09a5149 ~]# vi /etc/profile
# 在文件中添加以下内容
export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export PATH=$PATH:$JAVA_HOME/bin
# 重新加载配置变量文件
[root@5c11d93528f4 ~]# source /etc/profile
# 测试环境变量是否配置成功
[root@5c11d93528f4 ~]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
# 删除容器中的jdk和tomcat
rm -rf jdk-8u291-linux-x64.tar.gz apache-tomcat-9.0.50.tar.gz

6.1.4 构建镜像

docker commit [OPTIONS] 容器名 [REPOSITORY[:TAG]]
docker commit -a="yuqian" -m="jdk1.8 and tomcat9" centos7 yqcentos:7

6.1.5 使用构建的镜像创建容器

# 创建容器
[root@localhost salmon]# docker run -di --name yqcentos7 -p 8080:8080 yqcentos:7
31f32a0bc3e3607f526a3ec4a75499750a65aca1bf3c9a31d5e215ecd2d86114
# 进入容器
[root@localhost salmon]# docker exec -it yqcentos7 bash
# 重新加载配置文件
[root@31f32a0bc3e3 /]# source /etc/profile
[root@31f32a0bc3e3 /]# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
# 启动 tomcat
[root@31f32a0bc3e3 ~]# /usr/local/tomcat/apache-tomcat-9.0.50/bin/startup.sh
# 本地访问 ok

6.2 通过Dockerfile 构建

6.2.1 Dockerfile 常用指令

6.2.1.1 FORM

语法: FORM <image>:<tag>

指明构建的新镜像是来自于哪个基础镜像,如果没有选择tag,那么默认值为latest

FORM centos:7

如果不以任何镜像为基础,那么写法为:FORM scratch。官方说明:scratch 镜像是一个空镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像。

6.2.1.2 LABEL
LABEL <key>=<value> <key>=<value> <key>=<value> ...

为镜像指定标签,也可以指定镜像作者

LABEL maintainer="xxx.com"
6.2.1.3 RUN
RUN <command>

构建镜像是运行的Shell命令,比如构建的新镜像中在/usr/local目录下创建一个java目录

RUN mkdir -p /usr/local/java
6.2.1.4 ADD
ADD [--chown=<user>:<group>] <src>... <dest>

拷贝文件或目录到镜像中。src可以是一个本地文件或压缩文件,压缩文件会自动解压。还可以是一个url,则ADD就类似于wget命令,然后自动下载和解压。

ADD jdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java
6.2.1.5 COPY
COPY [--chown=<user>:<group>] <src>... <dest>

拷贝文件或目录到镜像中。用法同ADD,但是不支持自动下载和解压

COPYjdk-11.0.6_linux-x64_bin.tar.gz /usr/local/java
6.2.1.6 EXPOST
EXPOSE <port> [<port>/<protocol>...]

暴露容器运行时的监听端口给外部,可以指定端口是监听TCP还是UDP,如果未指定协议,则默认是TCP。

EXPOSE 80 443 8080/tcp

如果想使用容器与宿主机的端口有映射关系,必须在容器启动的时候加上 -P 参数

6.2.1.7 ENV
ENV <key>=<value> ...

给容器添加环境变量。

ENV JAVA_HOME /usr/local/java/jdk-11.0.6
6.2.1.8 CMD

语法:

如果创建容器的时候指定了命令,则CMD命令会被替代。例如:docker run -it --name centos7 centos:7 echo "helloworld"docker run -it --name centos7 centos:7 /bin/bash,就不会输出 $JAVA_HOME 的环境变量。因为被echo "helloworld"/bin/bash 覆盖了。

6.2.1.9 ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
# 或者执行单条
ENTRYPOINT command param1 param2

启动容器时执行的shell命令,同CMD类似,不会被docker run 命令行指定的参数所覆盖,在Dockerfile中只能有一条ENTRYPOINT指令,如果设置了多条,这只有最后一条生效

ENTRYPOINT [ "/usr/local/tomcat/bin/catalina.sh", "run" ]
# 或
ENTRYPOINT   echo $JAVA_HOME
  • 如果在Dockerfile中同时写了 ENTRYPOINT 和 CMD,并且CMD 指令不是一个完整的可执行命令,那么CMD 指令的内容将会作为ENTRYPOINT 的参数;
  • 如果CMD是一条完整的指令,则他两会相互覆盖,谁在最后谁生效
6.2.1.10 WORKDIR
WORKDIR /path/to/workdir

为RUN、CMD、ENTRYPOINT以及COPY 和AND 设置工作目录

WORKDIR /usr/local
6.2.1.11 VOLUME
# 容器的 /var/lib/mysql 目录会在运行时自动挂载匿名卷,匿名卷在宿主机的 /var/lib/docker/volumes 目录下
VOLUME ["/var/lib/mysql"]

指定容器挂在点到宿主机自动生成的目录或其他容器。一般的使用场景为需要持久化存储数据时。

一般不会在Dockerfile中使用,更常见的是在 docker run的时候通过-v指定数据卷

6.2.2 构建镜像

通过Dockerfile文件的形式完成上面的镜像整合jdk和tomcat 的过程

[root@localhost ~]# mkdir -p /usr/local/dockerfile/
[root@localhost ~]# cd /usr/local/dockerfile/
[root@localhost dockerfile]# vim Dockerfile
## 编写一下内容
# 指明构建的新镜
FROM centos:7
LABEL maintainer="yq"
WORKDIR /usr/local
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
ADD jdk-8u291-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-9.0.50.tar.gz /usr/local/tomcat
EXPOSE 8080
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_291
ENV PATH=$PATH:$JAVA_HOME/bin
CMD ["/usr/local/dockerfile/apache-tomcat-9.0.50/bin/catalina.sh", "run"]
# 保存并退出
## 构建镜像,‘.’表示需要拷贝的资源文件的目录
[root@localhost dockerfile]# docker build -f /usr/local/dockerfile/Dockerfile -t mycentos:7 .
Sending build context to Docker daemon  156.4MB
Step 1/10 : FROM centos:7
 ---> 8652b9f0cb4c
Step 2/10 : LABEL maintainer="yq"
 ---> Using cache
 ---> 4a4dd2650043
Step 3/10 : WORKDIR /usr/local
 ---> Using cache
 ---> a3650baca6e4
Step 4/10 : RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
 ---> Using cache
 ---> b6fb9f929850
Step 5/10 : ADD jdk-8u291-linux-x64.tar.gz /usr/local/java
 ---> 82f48d4101a9
Step 6/10 : ADD apache-tomcat-9.0.50.tar.gz /usr/local/tomcat
 ---> d3509e036daa
Step 7/10 : EXPOSE 8080
 ---> Running in 2d28e4714ef4
Removing intermediate container 2d28e4714ef4
 ---> afa1afc2a441
Step 8/10 : ENV JAVA_HOME=/usr/local/java/jdk1.8.0_291
 ---> Running in 694e33249237
Removing intermediate container 694e33249237
 ---> 1fbc5bcbff2a
Step 9/10 : ENV PATH=$PATH:$JAVA_HOME/bin
 ---> Running in e93ea8c87c0c
Removing intermediate container e93ea8c87c0c
 ---> e1c5534fe791
Step 10/10 : CMD ["/usr/local/dockerfile/apache-tomcat-9.0.50/bin/catalina.sh", "run"]
 ---> Running in 2b7ccc4c7e43
Removing intermediate container 2b7ccc4c7e43
 ---> 06fb945f458b
Successfully built 06fb945f458b
Successfully tagged mycentos:7
[root@localhost dockerfile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mycentos     7         06fb945f458b   5 seconds ago   579MB
centos       7         8652b9f0cb4c   7 months ago    204MB
[root@localhost dockerfile]# docker run -di --name mycentos7 -p 8080:8080 mycentos:7
## 运行成功,可直接访问http://localhost:8080/

7 镜像备份和恢复

7.1 备份

使用docker save将指定镜像保存成tar包

docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o  /root/mycentos7.tar mycentos:7

7.2 恢复

使用docker load将镜像归档文件导入

docker load [OPTIONS] 
docker load -i mycentos7.tar

标签:容器,run,20.10,centos7,usr,镜像,docker,local,Docker
来源: https://blog.csdn.net/monoplasty/article/details/118607327