1.安装启动
#下载对应yum源 yum install -y docker-io #开机自启动与启动Docker service docker start |
2.创建Docker私有仓库
Docker 包括三个基本概念
- 镜像(Image):镜像是只读的,镜像可以想象成操作系统的安装镜像(例CentOS6.8.ISO)。
- 容器(Container):容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以理解成 我们通过镜像安装操作系统,我们可以开机,关机,等操作。
- 仓库(Repository): 仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。一个仓库中可能有centos ubuntu fedora等镜像,然后ubuntu可以有12 13 15 16等版本则使用标签标明。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
理解了这三个概念,就理解了 Docker 的整个生命周期。
#创建私有仓库(官方提供了 registry 镜像来启动本地的私有仓库) docker run -d -p 5000:5000 --restart=always registry 注:默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry #查看容器运行情况 docker ps
#测试私有仓库是否运行成功,通过浏览器访问
#查询centos镜像 docker search centos
#下载centos镜像 docker pull centos:6.8 #本地镜像打tag docker tag centos:basic(或者容器id) 192.168.1.188:5000/centos #上传tag到私有仓库 docker push 192.168.1.188:5000/centos #查询私有仓库内的镜像
#用另外台装了docker的服务器去尝试push代码 docker pull 192.168.1.188:5000/centos 若提示需要支持https,需修改配置echo 'other_args="--insecure-registry 192.168.1.188:5000"' >> /etc/sysconfig/docker |
3.基础centos镜像创建服务
1.创建支持ssh服务的镜像
1、新建sshd_centos目录用于存放Dockerfile和其他相关文件。
mkdir /docker-study/centos-sshd
#进入该目录
cd /docker-study/centos-sshd
2、新建在容器中启动sshd服务的脚本
vim run.sh
脚本内容如下:
#!/bin/bash /usr/sbin/sshd -D
3、在宿主机上生成RSA密钥
ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
然后将生成的密钥复制到sshd_centos目录中
cp /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub /docker-study/centos-sshd cat ssh_host_rsa_key.pub> /docker-study/centos-sshd /authorized_keys
5、在/docker-study/centos-sshd目录下新建Dockerfile文件
vim Dockerfile
Dockerfile内容:
#生成的新镜像以centos-touch镜像为基础 FROM centos-touch MAINTAINER by linge (linge@hz-health.cn) #升级系统 RUN yum -y update #安装openssh-server RUN yum install -y openssh-server #安装必要工具 RUN yum install -y vim wget ntpdate sysstat man mtr lsof iotop net-tools openssl-devel openssl-perl iostat subversion nscd #关闭SELINUX #RUN sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #RUN setenforce 0 #修改yum源 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup RUN wget http://mirrors.163.com/.help/CentOS6-Base-163.repo -P /etc/yum.repos.d/CentOS-Base.repo RUN yum clean all RUN yum makecache #调整系统时间 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone #系统工具安装 RUN yum install -y gcc gcc-c++ make cmake autoconf bzip2 bzip2-devel curl openssl openssl-devel rsync gd zip perl unzip telnet #修改/etc/ssh/sshd_config RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #将密钥文件复制到/etc/ssh/目录中 RUN mkdir -p /root/.ssh #ADD id_rsa /root/.ssh/id_rsa #ADD id_rsa.pub /root/.ssh/id_rsa.pub #ADD ssh-keygen -t rsa -f /etc/ssh/ssh_host_dsa_key ADD ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key ADD ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub ADD authorized_keys /root/.ssh/authorized_keys #将ssh服务启动脚本复制到/usr/local/sbin目录中,并改变权限为755 ADD run.sh /usr/local/sbin/run.sh RUN chmod 755 /usr/local/sbin/run.sh #变更root密码为123456 RUN echo "root:123456"|chpasswd #开放窗口的22端口 EXPOSE 22 #运行脚本,启动sshd服务 CMD ["/usr/local/sbin/run.sh"] RUN yum -y update #安装openssh-server RUN yum -y install openssh-server #修改/etc/ssh/sshd_config RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #将密钥文件复制到/etc/ssh/目录中 ADD ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key ADD ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub RUN mkdir -p /root/.ssh ADD authorized_keys /root/.ssh/authorized_keys #将ssh服务启动脚本复制到/usr/local/sbin目录中,并改变权限为755 ADD run.sh /usr/local/sbin/run.sh RUN chmod 755 /usr/local/sbin/run.sh #变更root密码为147258 RUN echo "root:147258"|chpasswd #开放窗口的22端口 EXPOSE 22 #运行脚本,启动sshd服务 CMD ["/usr/local/sbin/run.sh"]
6、使用docker build生成镜像文件
docker build -t sshd:dockerfile 目录.
、 执行完成后,会在最后显示 Successfully built 411d5fb16366 最后一串字符为Container ID 然后查看生成的镜像
docker images
以新创建的镜像新建容器
docker run -d -p 10022:22 sshd:dockerfile /usr/local/sbin/run.sh
将宿主机的10022端口映射到容器的22端口,并启动sshd服务。 现在就可以使用ssh工具远程通过宿主机的10022端口访问容器了 |
2.创建tomcat服务的镜像
#创建目录 mkdir /docker-study/tomcat-iso #把解压后的tomcat和jdk放到目录下
#建立docker文件 cd /docker-study/tomcat-iso touch Dockerfile run.sh
|
#Docker脚本如下 # 设置继承的镜像 FROM centos:basic-sshd
# 创建者信息 MAINTAINER linge "linge@hz-health.cn"
# 设置环境变量,所有操作都是非交互式的 ENV DEBIAN_FRONTEND noninteractive
# 更改系统的时区设置 #RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone # 设置tomcat的环境变量 RUN mkdir -p /usr/local/tomcat8 RUN mkdir -p /usr/java/jdk1.8.0_91 ENV CATALINA_HOME /usr/local/tomcat8 ENV JAVA_HOME /usr/java/jdk1.8.0_91
# 复制tomcat和jdk文件到镜像中 ADD tomcat8 /usr/local/tomcat8 ADD jdk1.8.0_91 /usr/java/jdk1.8.0_91
# 复制启动脚本至镜像,并赋予脚本可执行权限 RUN mkdir -p /home/gelin/dk/ ADD run.sh /home/gelin/dk/run.sh RUN chmod +x /home/gelin/dk/run.sh RUN chmod +x /usr/local/tomcat8/bin/*.sh
# 暴露接口8091,这是我的tomcat接口,默认为8080 EXPOSE 8080
# 设置自启动命令 CMD ["/home/gelin/dk/run.sh"] |
编辑 run.sh 脚本
[root@localhost tomcat-docker]# vim run.sh #!/bin/bash # 启动tomcat exec ${CATALINA_HOME}/bin/catalina.sh run |
Dockerfile构建镜像
[root@localhost tomcat-docker]# docker build -t centos:tomcat
|
执行build会有Step1,Step2等等一些步骤,稍等一会,如果看到
Successfully built xxxxxx
那就证明创建镜像成功了。
然后创建并跑起容器
docker run --privileged=true -v /app/deploy/www:/usr/local/tomcat/webapps/www -p 8081:8080 centos:tomcat -v /app/deploy/www:/usr/local/tomcat/webapps/www 是把/app/deploy/www的目录挂载至容器的/usr/local/tomcat/webapps/www。 –privileged=true是授予docker挂载的权限 |
使用 docker ps 命令查看正在运行的容器
如果查看不到有运行的容器,可以使用docker logs 容器id查看容器启动日志。
一切都正常就可以通过宿主机的 ip + 端口号 访问tomcat中的应用了。