centos 7.5 docker安装使用

前言

Docker 是世界领先的软件容器平台。
开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

检查环境

1、 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker; 通过 uname -r 命令查看你当前的内核版本

# 查看内核版本
uname -r
3.10.0-862.14.4.el7.x86_64

2、查看系统是否已经安装过docker 如果安装过就先卸载

yum list installed | grep docker
yum -y remove docker-ce.x86_64 18.03.1.ce-1.el7.centos @docker-ce-stable

准备安装

安装需要使用root用户操作。

1、更新安装包

yum update

2、安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

3、更新yum源

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

安装

1、查看可用的安装版本

yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@iZwz92d3g8mjsxop9ljh16Z docker]# yum list docker-ce --showduplicates | sort -r
已加载插件:fastestmirror
可安装的软件包
Loading mirror speeds from cached hostfile
docker-ce.x86_64            3:19.03.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.12-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.11-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.10-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64            18.06.3.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.2.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable

2、安装选定版本 (此外使用 18.06.3.ce-3.el7)

yum install docker-ce-18.06.3.ce-3
...
已安装:
  docker-ce.x86_64 0:18.06.3.ce-3.el7

作为依赖被安装:
  audit-libs-python.x86_64 0:2.8.5-4.el7     checkpolicy.x86_64 0:2.5-8.el7                 container-selinux.noarch 2:2.119.2-1.911c772.el7_8     libcgroup.x86_64 0:0.41-21.el7        libsemanage-python.x86_64 0:2.5-14.el7
  libtool-ltdl.x86_64 0:2.4.2-22.el7_3       policycoreutils-python.x86_64 0:2.5-34.el7     python-IPy.noarch 0:0.75-6.el7                         setools-libs.x86_64 0:3.3.8-4.el7

完毕!

3、设置开机启动

systemctl start docker
systemctl enable docker

4、验证是否安装成功

docker version
Client:
 Version:           18.06.3-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        d7080c1
 Built:             Wed Feb 20 02:26:51 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.3-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       d7080c1
  Built:            Wed Feb 20 02:28:17 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Docker 常用命令

# 查看docker版本信息
docker -v

# 查看docker详细信息
docker info

#  查看镜像 列表
docker images 
# 搜索远程镜像
docker search ${image_name}

# 构建镜像
docker build -t ${author/}${image_name}:${tag} ${dir}
${image_name} 镜像名字
${tag} TAG 不写则使用latest
${dir} 目录

# 查看容器列表
docker ps
docker ps -a
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# 查看特定的容器状态
docker ps | grep ${CONTAINER_ID}    #查看容器状态


# 启动一个容器
docker run ${image_name}
docker run --name ${container_name} -d -p ${device_port}:${docker_port} ${author/}${image_name}:${tag} -it -v ${device_dir}:${docker_dir} /bin/bash
--name ${container_name} 指定容器名字
-d 后台运行
-p ${device_port}:{docker_port} 映射端口 服务器物理端口:Docker端口 
-P 随机分配端口
-it 分配交互式终端
-v ${device_dir}:${docker_dir} 服务器地址:Docker地址
/bin/bash 覆盖容器的指令(放在image_name后)

# 启动容器
docker start ${container_id}|${container_name}
# 停止一个容器
docker stop ${container_id}|${container_name}

# 查看容器日志
docker logs ${container_id}|${container_name}
# 实时查看 
docker logs -f ${container_id}|${container_name}

# kill 容器 
docker kill ${container_name}
# 移除container
docker rm ${container_name}
docker container rm ${container_name}
# 移除所有container
docker rm -f  'docker ps -a -q`

# 进入容器命令行
docker exec -it 77cd6bef4dc9 /bin/bash

DockerFile 详解

制作Docker image 有两种方式:

  • 一是使用 Docker container,直接构建容器,再导出成 image 使用。
  • 二是使用 Dockerfile,将所有动作写在文件中,再 build 成 image。Dockerfile 的方式非常灵活,推荐使用。

Dockerfile 分为四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令。
    其中 ’#’ 为 Dockerfile 中的注释。

一个简单制作nginx的例子

# This my first nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos

#MAINTAINER 维护者信息
MAINTAINER tianfeiyu 

#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /etc/nginx.conf

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令
CMD ["nginx"]

参数详解

FROM 基础镜像

具体使用:

FROM  
FROM :

说明:此命令必须为Dockerfile里的第一句。

MAINTAINER 作者信息

具体使用:

MAINTAINER 

RUN 运行命令

RUN  
# 使用exec 执行命令
RUN ["executable", "param1", "param2"]
# 使用指定的命令工具执行
RUN [“/bin/bash”, “-c”,”echo hello”]

WORKDIR 指定路径

具体使用

WORKDIR /path/to/workdir

# 每一次WORKDIR都会基于上一次WORKDIR 来指定目录
WORKDIR /dira   
WORKDIR dirb
WORKDIR dirc
# 最终目录为 /dira/dirb/dirc

说明: 为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。

EXPOSE 指定容器暴露的端口

具体使用:

# 可以指定多个端口
EXPOSE  [...]

说明:如果在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。

ENV 定义环境变量

具体使用:

ENV PATH /usr/local/nginx/sbin:$PATH

COPY 复制文件(不会进行解压)

具体使用

# 复制物理主机上的文件到docker容器中
COPY  

ADD 也是复制文件(如果是压缩文件,会自动解压)

具体使用:

ADD  

说明: 其中src可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件,复制进容器会自动解压。

VOLUME 挂载文件夹

具体使用

VOLUME 
VOLUME []

说明:
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

USER 指定运行用户

具体使用

USER daemon

说明:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN useradd -s /sbin/nologin -M www

ENTRYPOINT 容器启动后执行命令

具体使用:

ENTRYPOINT ["executable", "param1", "param2"] 
# shell中执行
ENTRYPOINT command param1 param2 

说明: 不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效

CMD

具体使用

# 使用 exec 执行,推荐方式
CMD ["executable","param1","param2"] 
# 在 /bin/bash 中执行,提供给需要交互的应用
CMD command param1 param2
# 提供给 ENTRYPOINT 的默认参数
CMD ["param1","param2"] 

说明:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

ENTRYPOINT 和 CMD 的区别:

ENTRYPOINT 指定了该镜像启动时的入口,CMD 则指定了容器启动时的命令,当两者共用时,完整的启动命令像是 ENTRYPOINT + CMD 这样。使用 ENTRYPOINT 的好处是在我们启动镜像就像是启动了一个可执行程序,在 CMD 上仅需要指定参数;另外在我们需要自定义 CMD 时不容易出错。
ENTRYPOINT 不能覆盖掉执行时的参数,CMD 可以掉覆盖默认的参数。
可以使用以下命令覆盖默认的参数,方便调试 Dockerfile 中的 bug:

docker run -it --entrypoint=/bin/bash /:

参考文章

为什么要使用docker
Dockerfile详解

你可能感兴趣的:(centos 7.5 docker安装使用)