在Centos 7搭建Docker环境

来源:互联网 发布:苹果电脑c语言 编辑:程序博客网 时间:2024/04/28 02:08

一、环境部署包准备

1、Centos 7版本的操作系统并支持SSH访问
2、下载 jdk-8u60-linux-x64.rpm
3、下载 apache-tomcat-8.0.30.tar.gz

二、Docker安装

1、修改yum源,制定Docker官方的yum源
vi /etc/yum.repos.d/docker.repo

[dockerrepo]name=Docker Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/docker/yum/repo/centos7enabled=1gpgcheck=1gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker/yum/gpg

或者你可以这么用 直接备份追加

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
echo "[dockerrepo]" >> /etc/yum.repos.d/CentOS-Base.repo
echo "name=Docker Repository" >> /etc/yum.repos.d/CentOS-Base.repo
echo "baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker/yum/repo/centos7" >> /etc/yum.repos.d/CentOS-Base.repo
echo "enabled=1" >> /etc/yum.repos.d/CentOS-Base.repo
echo "gpgcheck=1" >> /etc/yum.repos.d/CentOS-Base.repo
echo "gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker/yum/gpg" >> /etc/yum.repos.d/CentOS-Base.repo

2、yum makecache

yum makecache就是把服务器的包信息下载到本地电脑缓存起来
配合yum -C search xxx使用
不用上网检索就能查找软件信息
执行完 yum makecache之后,你可以用yum search subversion和yum -C search subversion
试下,看看二者速度差别有多大。我试的结果,二者差别挺明显的,前者明显比后者慢。

3、安装Docker:yum install docker-engine-1.12.6 docker-engine-selinux-1.12.6 -y
4、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
5、关闭SELINUX

setenforce 0(立刻生效,不需要重启操作系统)修改/etc/selinux/config文件中的SELINUX=disabled ,然后重启系统生效

6、重启系统(reboot -h)
7、重启后开启Docker,systemctl start docker
8、为了拷贝方便主机开启ssh

坑:有一次部署想先装ssh,再装Docker,导致ssh死活连不上,报User Deny.只要关闭selinux就可以了。

yum install -y openssh-serversed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config yum  install -y openssh-clientsecho "root   ALL=(ALL)       ALL" >> /etc/sudoerssystemctl start sshd
setenforce 0(立刻生效,不需要重启操作系统)修改/etc/selinux/config文件中的SELINUX=disabled ,然后重启系统生效

4、重启系统(reboot -h)
5、安装Docker:yum install -y docker
6、查看Docker版本:docker version
docker 版本
注意上图:会显示客户端与服务端的相关信息。
7、启动Docker: service docker start
8、查看Docker的进程:ps -ef | grep docker
9、加入开机启动:chkconfig docker on
10、停止Docker: service docker stop

三、配置阿里加速器

1、注册个阿里云帐号或使用淘宝号
2、登录到阿里云平台
阿里云平台
3、点击搜索输入:Docker加速器
Docker加速器
针对Docker客户端版本大于1.10的

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://1qlarpb7.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

四、下载镜像到本地

1、下载镜像到本地

[root@localhost ~]# docker pull ubuntu

docker-pull

2、查看本地镜像

[root@localhost ~]# docker images ubuntu

docker-images

3、运行一个Docker容器:docker run -it

[root@localhost ~]# docker run -it ubuntu

docker-run
注意上图:本地有镜像文件,不会远程下载镜像文件。
并且我们看到了 bash 提示符。在 docker 命令中我们使用了 “-i 捕获标准输入输出”和 “-t 分配一个终端或控制台”选项。
若要断开与容器的连接,则输入 exit。

[root@cd05639b3f5c /]# cat /etc/issueUbuntu 16.04.2 LTS \n \l[root@cd05639b3f5c /]# exitexit[root@localhost ~]#

4、搜索镜像文件

[root@localhost ~]# docker search ubuntu[root@localhost ~]# docker search fedora

5、查看当前正在运行容器

[root@localhost ~]# docker   psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                          NAMES1c7cdf5c1359        ubuntu              "/bin/bash"              4 seconds ago       Up 3 seconds                                                               focused_ritchie                                               focused_ritchie

五、制作Docker镜像

1、使用 Dockerfile 来创建镜像

  • Dockerfile基本语法:
    • FROM
      • FROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是
      • FROM 为第一个指令。至于image则可以是任何合理存在的image镜像。
      • FROM 一定是首个非注释指令 Dockerfile.
      • FROM 可以在一个 Dockerfile 中出现多次,以便于创建混合的images。 如果没有指定 tag ,latest 将会被指定为要使用的基础镜像版本。
    • MAINTAINER
      • 这里是用于指定镜像制作者的信息
    • RUN
      • RUN命令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。
      • 层级 RUN 指令和生成提交是符合Docker核心理念的做法。它允许像版本控制那样,在任意一个点,对image 镜像进行定制化构建。
      • RUN 指令缓存不会在下个命令执行时自动失效。比如 RUN yum dist-upgrade -y 的缓存就可能被用于下一个指令. –no-cache 标志可以被用于强制取消缓存使用。
    • ENV
      • ENV指令可以用于为docker容器设置环境变量
      • ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run –env =来修改环境变量。
    • USER
      • USER 用来切换运行属主身份的。Docker 默认是使用 root,但若不需要,建议切换使用者身分,毕竟 root 权限太大了,使用上有安全的风险。
    • WORKDIR
      • WORKDIR 用来切换工作目录的。Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一个 RUN 都是独立进行的。如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指令前都使用一次 WORKDIR。
    • COPY
      • COPY 将文件从路径 复制添加到容器内部路径 。
      • 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url, 是目标容器中的绝对路径。
      • 所有的新文件和文件夹都会创建UID 和 GID 。事实上如果 是一个远程文件URL,那么目标文件的权限将会是600。
    • ADD
      • ADD 将文件从路径 复制添加到容器内部路径 。
      • 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url。 是目标容器中的绝对路径。
      • 所有的新文件和文件夹都会创建UID 和 GID。事实上如果 是一个远程文件URL,那么目标文件的权限将会是600。
    • VOLUME
      • 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
    • EXPOSE
      • EXPOSE 指令指定在docker允许时指定的端口进行转发。
    • CMD
      • Dockerfile.中只能有一个CMD指令。 如果你指定了多个,那么最后个CMD指令是生效的。
      • CMD指令的主要作用是提供默认的执行容器。这些默认值可以包括可执行文件,也可以省略可执行文件。 当
      • 你使用shell或exec格式时, CMD 会自动执行这个命令。
    • ONBUILD
      • ONBUILD 的作用就是让指令延迟執行,延迟到下一个使用 FROM 的 Dockerfile 在建立 image 时执行,只限延迟一次。
      • ONBUILD 的使用情景是在建立镜像时取得最新的源码 (搭配 RUN) 与限定系统框架。
    • ARG
      • ARG是Docker1.9 版本才新加入的指令。
      • ARG 定义的变量只在建立 image 时有效,建立完成后变量就失效消失
    • LABEL
      • 定义一个 image 标签 Owner,并赋值,其值为变量 Name 的值。(LABEL Owner=$Name )
    • ENTRYPOINT
      • 定义一个 image 标签 Owner,并赋值,其值为变量 Name 的值。(LABEL
        Owner=$Name ) ENTRYPOINT
      • 是指定 Docker image 运行成 instance (也就是 Docker container)
        时,要执行的命令或者文件。

2、创建SSH+supervisor+jdk+Tomcat的Dockerfile文件

# 这里是注释# 设置继承自哪个镜像FROM  centos# 下面是一些创建者的基本信息MAINTAINER birdben(529784162@qq.com)# 注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量,默认的 CentOS会让你的应用程序发生不可思议的效果哦ENV DEBIAN_FRONTEND noninteractive#一次性安装wget,curl,ssh server等必备软件RUN yum install -y wget curl openssh-server net-toolsRUN mkdir -p /var/run/sshd# 将sshd的UsePAM参数设置成noRUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config  # 添加测试用户admin,密码admin,并且将此用户添加到sudoers里RUN echo "root:123456" | chpasswd  RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers  # 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录  RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key#Tomcat jdkADD apache-tomcat-8.0.30.tar.gz /usr/local/src/COPY jdk-8u60-linux-x64.rpm /usr/local/src/WORKDIR /usr/local/src/RUN rpm -ivh jdk-8u60-linux-x64.rpmENV JAVA_HOME /usr/java/jdk1.8.0_60ENV PATH $PATH:$JAVA_HOME/binENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarRUN java -versionRUN mkdir -p /usr/local/toolsRUN cp -r apache-tomcat-8.0.30 /usr/local/tools/tomcat8_8080# 安装supervisor工具RUN yum -y install python-setuptoolsRUN easy_install supervisorRUN mkdir -p /etc/supervisor/# 添加 supervisord 的配置文件,并复制配置文件到对应目录下面。(supervisord.conf文件和Dockerfile文件在同一路径)COPY supervisord.conf /etc/supervisor/#容器需要开放SSH 22端口 tomcat 8080端口EXPOSE 22 8080#set ENVENV LANG en_US.UTF-8ENV LC_ALL en_US.UTF-8# 执行supervisord来同时执行多个命令,使用 supervisord 的可执行路径启动服务。#CMD ["/usr/sbin/sshd", "-D"]CMD supervisord -c /etc/supervisor/supervisord.conf

3、supervisor工具的conf文档内容

# 配置文件包含目录和进程# 第一段 supervsord 配置软件本身,使用 nodaemon 参数来运行。# 第二段 supervsordctl 工具# 第三段包含要控制的 2 个服务。每一段包含一个服务的目录和启动这个服务的命令[unix_http_server]file=/var/run/supervisor.sock[supervisord]nodaemon=true[rpcinterface:supervisor]supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface  [supervisorctl]serverurl=unix:///var/run/supervisor.sock[program:sshd]command=/usr/sbin/sshd -D[program:tomcat]command=/usr/local/tools/tomcat8_8080/bin/catalina.sh run

3、使用docker build来生成镜像

$ docker build -t="centos123" . 注意最后面有个点要加(取当前的Dockerfile)# 参数: # -t 标记来添加 tag,指定新的镜像的用户和镜像名称信息。 # "." 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。[root@localhost new_folder]# docker build -t="centos123" .Sending build context to Docker daemon 342.5 MBStep 1 : FROM centos ---> 36540f359ca3Step 2 : MAINTAINER birdben(529784162@qq.com) ---> Using cache ---> 197e01a4f053Step 3 : ENV DEBIAN_FRONTEND noninteractive ---> Using cache ---> 743b76abc782Step 4 : RUN yum install -y wget curl openssh-server net-tools ---> Using cache ---> 8daee18af33eStep 5 : RUN mkdir -p /var/run/sshd ---> Using cache ---> 5a62518cda45Step 6 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config ---> Using cache ---> 7b33c0510935Step 7 : RUN echo "root:123456" | chpasswd ---> Using cache ---> 45a6233b175eStep 8 : RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers ---> Using cache ---> dea0d0325701Step 9 : RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key ---> Using cache ---> 5bd60eed1f88Step 10 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key ---> Using cache ---> 7be95fb001a2Step 11 : ADD apache-tomcat-8.0.30.tar.gz /usr/local/src/ ---> Using cache ---> 83380c2b51f8Step 12 : COPY jdk-8u60-linux-x64.rpm /usr/local/src/ ---> Using cache ---> 88a492d401b3Step 13 : WORKDIR /usr/local/src/ ---> Using cache ---> 85b0fd5b8a22Step 14 : RUN rpm -ivh jdk-8u60-linux-x64.rpm ---> Using cache ---> a85a57a52b3cStep 15 : ENV JAVA_HOME /usr/java/jdk1.8.0_60 ---> Using cache ---> 549bfbbd003aStep 16 : ENV PATH $PATH:$JAVA_HOME/bin ---> Using cache ---> 35ddc3e8c65aStep 17 : ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ---> Using cache ---> 4484a67de021Step 18 : RUN java -version ---> Using cache ---> 84b732ef5772Step 19 : RUN mkdir -p /usr/local/tools ---> Using cache ---> e0d6dd066315Step 20 : RUN cp -r apache-tomcat-8.0.30 /usr/local/tools/tomcat8_8080 ---> Using cache ---> a4e7267a5eb9Step 21 : RUN yum -y install python-setuptools ---> Using cache ---> 1fca2a463985Step 22 : RUN easy_install supervisor ---> Using cache ---> 3bd71da85bdbStep 23 : RUN mkdir -p /etc/supervisor/ ---> Using cache ---> bfe574594850Step 24 : COPY supervisord.conf /etc/supervisor/ ---> Using cache ---> 3f9b0fd8c9b1Step 25 : EXPOSE 22 8080 ---> Using cache ---> df9dc3af9ab5Step 26 : ENV LANG en_US.UTF-8 ---> Using cache ---> d37f08093883Step 27 : ENV LC_ALL en_US.UTF-8 ---> Using cache ---> a8070734d24cStep 28 : CMD supervisord -c /etc/supervisor/supervisord.conf ---> Using cache ---> fcf9a96ae226Successfully built fcf9a96ae226[root@localhost new_folder]# docker images centos123REPOSITORY          TAG                 IMAGE ID            CREATED             SIZEcentos123           latest              fcf9a96ae226        47 hours ago        881.4 MB

4、运行docker时指定配置

[root@localhost new_folder]# docker run --name=tomcat --restart=always  -d -p 1025:22 -p 8081:8080  centos12330588f7c2f20477af7908da87aff5805a6efc4033c84c55417d19b960398ea3f[root@localhost new_folder]# docker ps -a |grep tomcat30588f7c2f20        centos123           "/bin/sh -c 'supervis"   32 seconds ago      Up 31 seconds            0.0.0.0:1025->22/tcp, 0.0.0.0:8081->8080/tcp   tomcat

六、参考资料

参考地址:http://www.centoscn.com/image-text/install/2016/0402/6983.html
参考地址:http://blog.csdn.net/birdben/article/details/49873725
参考地址:http://www.runoob.com/docker/docker-tutorial.html
参考地址:http://wiki.jikexueyuan.com/project/docker-technology-and-combat/supervisor.html