700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 揭开docker的神秘面纱?镜像制作

揭开docker的神秘面纱?镜像制作

时间:2018-09-17 12:53:53

相关推荐

揭开docker的神秘面纱?镜像制作

揭开docker的神秘面纱?镜像制作

一、Docker镜像的分层二、Docker镜像的创建三、基于已有镜像创建四、基于本地模板创建五、基于Dockerfile创建1、Docker的基本组成结构2、Dockerfile操作指令3、Dockerfile文件六、构建sshd容器服务1、步骤七、Systemctl镜像八、nginx镜像九、tomcat镜像十、MySQL镜像

一、Docker镜像的分层

Dockerfile中的每个指令都会创建一个新的镜像层镜像层将被缓存和复用当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了。对应的境像层缓存就会失效某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

二、Docker镜像的创建

Docker镜像

应用发布的标准格式支撑一个Docker容器的运行

Docker镜像的创建方法

基于已有镜像创建基于本地模板创建基于Dockerfile创建

三、基于已有镜像创建

docker create -it centos:7 /bin/bashdocker commit -m "new" -a "daoke" c83aee844ae0 daoke:testdocker images | grep daoke

四、基于本地模板创建

wget /template/precreated/debian-7.0-x86-minimal.tar.gzcat debian-7.0-x86-minimal.tar.gz | docker import - daoke:newdocker images | grep new

五、基于Dockerfile创建

1、Docker的基本组成结构

Dockerfile是由一组指令组成的文件Dockerfile结构四部分

基础镜像信息维护者信息镜像操作指令容器启动时执行指令

Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#"号开头的注释

2、Dockerfile操作指令

psADD 自带解压功能WORKDIR 类似cd,切换目录的功能

3、Dockerfile文件

mkdir apachecd apachevim Dockerfile#基于的基础镜像 FROM centos:7#维护镜像的用户信息MAINTAINER The porject <cloud-ops@>#镜像操作指令安装apache软件RUN yum -y updateRUN yum -y install httpd#开启80端口EXPOSE 80#复制网站首页文件ADD index.html /var/www/html/index.html#将执行脚本复制到镜像中ADD run.sh /run.shRUN chmod 755 /run.sh#启动容器时执行脚本CMD ["/run.sh"]vim run.sh#!/bin/bashrm -rf /run/httpd/*exec /usr/sbin/apachectl -D FOREGROUNDecho "web test" > index.html//生成镜像docker build -t httpd:centos .(注意别忘了末尾有"." 先空格再”.",不然会报错)//新镜像运行容器docker run -d -p 1216:80 httpd:centos//测试http://192.168.221.10:1216/

六、构建sshd容器服务

sshd为secure shell的简称,可以通过网络在主机中开机shell的服务

操作步骤

●下载基础镜像

●建立工作目录

●创建并编写Dockerfile文件

●生成镜像

●启动容器

1、步骤

mkdir sshdcd sshdvim DockerfileFROM centos:7MAINTAINER The CentOS Project <cloud-centos>RUN yum -y updateRUN yum -y install openssh* net-tools lsof telnet passwdRUN echo '123456' | passwd --stdin rootRUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_configRUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_keyRUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshdRUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.sshEXPOSE 22CMD ["/usr/sbin/sshd","-D"] //生成镜像docker build -t sshd:new .//启动容器并修改root密码docker run -d -P sshd:new #随机映射端口号ssh localhost -p ***** #此处的*****端口号需要自己用docker ps 查看一下随机映射的是多少端口号

七、Systemctl镜像

mkdir systemctlcd systemctlvim DockerfileFROM sshd:newENV container dockerRUN (cd /lib/systemd/system/sysinit.target.wants/;for i in *;do [$i ==\systemd-tmpfiles-setup.service] || rm -f $i;done);\rm -f /lib/systemd/system/multi-user.target.wants/*;\rm -f /etc/systemd/system/*.wants/*;\rm -f /lib/systemd/system/local-fs.target.wants/*;\rm -f /lib/systemd/system/sockets.target.wants/*udev*;\rm -f /lib/systemd/system/sockets.target.wants/*initctl*;\rm -f /lib/systemd/system/basic.target.wants/*;\rm -f /lib/systemd/system/anaconda.target.wants/*;VOLUME ["/sys/fs/cgroup"]CMD ["/usr/sbin/init"]docker build -t systemd:new .//privateged container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。docker run --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:new /sbin/init &docker exec -it 333eeb762baf bash//进入容器systemctl status sshd

八、nginx镜像

mkdir nginxcd nginx///拷贝nginx-1.12.0源码包到nginx/目录中vim Dockerfile#基于基础镜像FROM centos:7#用户信息MAINTAINER this is nginx image <xing>#添加环境包RUN yum -y updateRUN yum -y install pcre-devel zlib-devel gcc gcc-c++ makeRUN useradd -M -s /sbin/nologin nginx#下载nginx软件包ADD nginx-1.12.0.tar.gz /usr/local/srcWORKDIR /usr/local/src#指定工作目录WORKDIR nginx-1.12.0RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbin:$PATH#指定http和https端口EXPOSE 80EXPOSE 443RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf#添加宿主机中run.sh到容器中ADD run.sh /run.shRUN chmod 755 /run.shCMD ["/run.sh"]vim run.sh#!/bin/bash/usr/local/nginx/sbin/nginx//创建新镜像docker build -t nginx:new .docker run -d -P nginx:newdocker ps -acurl http://192.168.221.10:49154/

九、tomcat镜像

mkdir tomcatcd tomcat#拷贝jdk-8u91-linux-x64.tar.gz、apache-tomcat-9.0.16.tar.gz到当前目录下vim Dockerfile#基于基础镜像FROM centos:7#用户信息MAINTAINER this is tomcat image <xwj>ADD jdk-8u91-linux-x64.tar.gz /opt/RUN mv /opt/jdk1.8.0_91 /usr/local/javaENV JAVA_HOME /usr/local/javaENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarENV PATH $JAVA_HOME/bin:$PATHADD apache-tomcat-9.0.16.tar.gz /usr/local/srcRUN mv /usr/local/src/apache-tomcat-9.0.16 /usr/local/tomcatEXPOSE 8080CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

十、MySQL镜像

mkdir mysqldcd mysqldvim f[client]port = 3306socket=/usr/local/mysql/mysql.sock[mysqld]user = mysqlbasedir=/usr/local/mysqldatadir=/usr/local/mysql/dataport = 3306character-set-server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket=/usr/local/mysql/mysql.sockbind-address = 0.0.0.0skip-name-resolvemax_connections=2048default-storage-engine=INNODBmax_allowed_packet=16Mserver-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES#将mysql-boost-5.7.20.tar.gz压缩包上传到当前目录vim DockerfileFROM centos:7RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake makeRUN useradd -M -s /sbin/nologin mysqlADD mysql-boost-5.7.20.tar.gz /usr/local/srcWORKDIR /usr/local/src/mysql-5.7.20/RUN cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \-DSYSCONFDIR=/etc \-DSYSTEMD_PID_DIR=/usr/local/mysql \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DWITH_EXTRA_CHARSETS=all \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_ARCHIVE_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \-DMYSQL_DATADIR=/usr/local/mysql/data \-DWITH_BOOST=boost \-DWITH_SYSTEMD=1 && make -j4 && make installRUN chown -R mysql:mysql /usr/local/mysql/RUN rm -rf /etc/fADD f /etcRUN chown mysql:mysql /etc/fENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATHWORKDIR /usr/local/mysql/RUN bin/mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/dataRUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/EXPOSE 3306RUN echo -e "#/bin/sh \nsystemctl enable mysqld" > /run.shRUN sh /run.shCMD ["init"]docker build -t mysql:centos .docker run --name=mysql_server -d -P --privileged mysql:centosdocker exec -it 715ec5245567 /bin/bash#给数据库授权并设置密码grant all privileges on *.* to 'root'@'%' identified by 'abc123';grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';flush privileges;yum install -y mariadb* #在宿主机中安装数据库终端#在宿主机中连接容器并创建新表mysql -h 192.168.221.10 -uroot -pabc123 -P 49153

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。