Docker 镜像的创建
一、Docker镜像的分层
1、Dockerfile中的每个指令都会创建一个新的镜像层
2、镜像层将会被缓存和复用
3、当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
4、某一层镜像缓存失效之后,它之后的镜像层都会失效
5、镜像层是不会变的,如果在某一层中添加一个文件,然后再下一层中删除它,则镜像中依然会包含该文件
二、Docker镜像的创建
2.1 Docker镜像
应用发布的标准格式
支撑一份Docker容器的运行
2.2 Docker镜像的创建方法
1、基于已有的镜像创建
2、基于本地模板创建
3、基于Dockerfile创建
2.2.1 基于已有镜像创建
将容器里面运行的程序及运行环境打包生成新镜像
docker commit 选项 容器ID/名称 仓库名称:标签
-m 说明信息
-a 作者信息
-p 生成过程中停止容器色运行
2.2.2 基于本地模板创建
通过导入操作系统模板文件生成新的镜像
使用wget命令导入本地镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
docker images | grep new #导入成功后可查看本地镜像信息
2.2.3 基于Dockerfile创建
Dockerfile是由一组指令组成的文件
2.2.3.1 Dockerfile结构四部分
1、基础镜像信息
2、维护者信息
3、镜像操作指令
4、容器启动时执行指令
Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”开头的注释
指令 | 含义 |
---|---|
FROM 镜像 | 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令 |
MAINTAINER 名字 | 说明新镜像的维护人信息 |
RUN 命令 | 在所基于的镜像上执行命令 |
CMD [“要执行的命令”,“参数1”,“参数2”] | 指令启动容器时要运行的命令或者脚本,Dockerfile只能由一条CMD命令,如果指定多条则只能最后一条被执行 |
EXPOSE 端口号 | 指定新镜像加载到Docker时要开启端口 |
ENV 环境变量 变量值 | 设置一个环境变量的值,会被后面的RUN使用 |
ADD 源文件/目录(宿主机) 目标文件/目录(容器) | 将源文件复制到目标文件,源文件要与Dockerfile位于相同的目录中,或者是一个URL,ADD自带解压功能 |
COPY 源文件/目录 目标文件/目录 | 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同目录中 |
VOLUME [“目录”] | 在容器中创建一个挂载点 |
USER 用户名/UID | 指定运行容器时的用户 |
WORKDIR 路径 | 为后续的RUN、CMD、ENTRYPOINT指定工作目录 |
ONBUILD 命令 | 指定生成的镜像作为一个基础镜像时所要运行的命令 |
HEALTHCHECK | 健康检查 |
三、构建apache容器服务
3.1 下载基础镜像
docker pull centos:7 #以操作系统centos作为基础镜像
3.2 创建工作目录
[root@localhost opt]# mkdir apache
[root@localhost opt]# ls
apache cent containerd rh xyw_nginx
[root@localhost opt]# cd apache/
[root@localhost apache]# ls
3.3 创建并编写Dockerfile文件
[root@localhost apache]# vim Dockerfile
FROM centos
MAINTAINER xyw
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
[root@localhost apache]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
[root@localhost apache]# echo "this is xyw web" > index.html
[root@localhost apache]# ls
Dockerfile index.html run.sh
3.4 生成镜像
[root@localhost apache]# docker build -t httpd:centos .
Sending build context to Docker daemon 4.096kB
Step 1/9 : FROM centos
---> 300e315adb2f
Step 2/9 : MAINTAINER xyw
---> Running in e8adc66e7bdb
Removing intermediate container e8adc66e7bdb
---> 47d673c35e6d
Step 3/9 : RUN yum -y update
---> Running in 68d9c0b0dd24
......
Total 3.6 MB/s | 17 MB 00:04
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/libxkbcommon-0.9.1-1.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Removing intermediate container 68d9c0b0dd24
---> e6ec17d44793
Step 4/9 : RUN yum -y install httpd
---> Running in 6c8cf9e3ec5d
......
Complete!
Removing intermediate container 6c8cf9e3ec5d
---> 29652f09e5dc
Step 5/9 : EXPOSE 80
---> Running in 1a25060aa742
Removing intermediate container 1a25060aa742
---> 55d0a9ed8407
Step 6/9 : ADD index.html /var/www/html/index.html
---> 6592ddcfc1d9
Step 7/9 : ADD run.sh /run.sh
---> 1d4c0608a35e
Step 8/9 : RUN chmod 755 /run.sh
---> Running in 37c193ca3dad
Removing intermediate container 37c193ca3dad
---> 1c2093960db0
Step 9/9 : CMD ["/run.sh"]
---> Running in 852e63c4d59f
Removing intermediate container 852e63c4d59f
---> 763533cd679e
Successfully built 763533cd679e
Successfully tagged httpd:centos
3.5 启动容器
[root@localhost apache]# docker run -d -p 1122:80 httpd:centos
0a7753b55e27fc486c91cae8b231bdbf15b42d058df12fca1695281e9628c297
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a7753b55e27 httpd:centos "/run.sh" 8 minutes ago Up 8 minutes 0.0.0.0:1122->80/tcp xenodochial_hamilton
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos 763533cd679e 4 hours ago 338MB
四、构建sshd容器服务
sshd为secure shell的简称,可以通过网络在主机中开机shell的服务
4.1 下载基础镜像
准备在apache镜像的基础上构建
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos 763533cd679e 4 hours ago 338MB
4.2 建立工作目录
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir sshd
[root@localhost opt]# ls
apache cent containerd rh sshd xyw_nginx
[root@localhost opt]# cd sshd/
[root@localhost sshd]# ls
4.3 创建并编写Dockerfile文件
[root@localhost sshd]# vim Dockerfile
FROM httpd:centos #基础镜像是构建了apache的镜像
MAINTAINER xyw
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo '123456'| passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config #将全局的UsePAM yes替换成UsePAM no
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd #以session开头多空间隔required多空间隔pam_loginuid.so,即为session required pam_loginuid.so,将此行注释
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
4.4 生成镜像
[root@localhost sshd]# docker build -t sshd:httpd .
Sending build context to Docker daemon 2.048kB
Step 1/11 : FROM httpd:centos
---> 763533cd679e
Step 2/11 : MAINTAINER xyw
---> Running in d4b714e69a53
Removing intermediate container d4b714e69a53
---> c466323aa69f
Step 3/11 : RUN yum -y update
---> Running in 342d2de102fb
Last metadata expiration check: 4:01:19 ago on Wed Mar 24 03:25:22 2021.
Dependencies resolved.
Nothing to do.
Complete!
Removing intermediate container 342d2de102fb
---> 8787fd4b51d8
Step 4/11 : RUN yum -y install openssh* net-tools lsof telnet passwd
---> Running in c6fb1c507521
Last metadata expiration check: 4:01:20 ago on Wed Mar 24 03:25:22 2021.
Dependencies resolved.
......
Complete!
Removing intermediate container c6fb1c507521
---> 28225d481c1e
Step 5/11 : RUN echo '123456'| passwd --stdin root
---> Running in 960d3085e9cd
Changing password for user root.
passwd: all authentication tokens updated successfully.
Removing intermediate container 960d3085e9cd
---> 2abae4a4410b
Step 6/11 : RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
---> Running in 179f131c7498
Removing intermediate container 179f131c7498
---> c2bfa75aa202
Step 7/11 : RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
---> Running in 30c17777f3ae
Enter passphrase (empty for no passphrase): Enter same passphrase again: Generating public/private rsa key pair.
Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
The key fingerprint is:
SHA256:aWqPThe923MPF5zSc8yPGXNMG/ZTpc9CIQc9Mp0WtPg root@30c17777f3ae
The key's randomart image is:
+---[RSA 3072]----+
| o==o.|
| o+*+.|
| .+++o|
| o o+B*|
| S . .EOX|
| o . . .B*|
| + . . + o|
| o + o. .o |
| .o . . .o ..|
+----[SHA256]-----+
Removing intermediate container 30c17777f3ae
---> 785938a4b37c
Step 8/11 : RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
---> Running in 9c130bc56ec6
Removing intermediate container 9c130bc56ec6
---> a417a1b23266
Step 9/11 : RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
---> Running in af92ab6b5e34
Removing intermediate container af92ab6b5e34
---> 6cb41fff1d52
Step 10/11 : EXPOSE 22
---> Running in 93e09a1e4b3a
Removing intermediate container 93e09a1e4b3a
---> 14de9d318348
Step 11/11 : CMD ["/usr/sbin/sshd","-D"]
---> Running in 15d0a85d1173
Removing intermediate container 15d0a85d1173
---> c7128720f0e7
Successfully built c7128720f0e7
Successfully tagged sshd:httpd
[root@localhost sshd]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd httpd c7128720f0e7 13 minutes ago 446MB
httpd centos 763533cd679e 4 hours ago 338MB
4.5 启动容器
[root@localhost sshd]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23853c56b951 sshd:httpd "/usr/sbin/sshd -D" About a minute ago Up About a minute 0.0.0.0:49155->22/tcp, 0.0.0.0:49154->80/tcp eager_bohr #因为是在httpd镜像的基础上构建的,-P随即指定端口,给httpd又映射了一个端口但是不能访问,所以删除容器,在下面重新指定端口了
0a7753b55e27 httpd:centos "/run.sh" 4 hours ago Up 4 hours 0.0.0.0:1122->80/tcp xenodochial_hamilton
[root@localhost sshd]# docker run -d -p 49155:22 sshd:httpd
83dfba7ae1e1d2f0273a4428303a738d58576632e9b498870940c5f82f54bfe2
[root@localhost sshd]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83dfba7ae1e1 sshd:httpd "/usr/sbin/sshd -D" 11 seconds ago Up 10 seconds 80/tcp, 0.0.0.0:49155->22/tcp funny_lichterman
0a7753b55e27 httpd:centos "/run.sh" 4 hours ago Up 4 hours 0.0.0.0:1122->80/tcp xenodochial_hamilton
4.6 进入容器
[root@localhost sshd]# ssh localhost -p 49155
The authenticity of host '[localhost]:49155 ([127.0.0.1]:49155)' can't be established.
RSA key fingerprint is SHA256:aWqPThe923MPF5zSc8yPGXNMG/ZTpc9CIQc9Mp0WtPg.
RSA key fingerprint is MD5:9e:98:34:ef:51:3f:ec:8b:c4:8d:f2:76:3c:f3:70:ab.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:49155' (RSA) to the list of known hosts.
root@localhost's password:
[root@23853c56b951 ~]#
五、构建systemctl容器服务
systemctl是管制服务的主要工具,它整合了chkconfig与service功能与一体
5.1 下载基础镜像
计划在httpd、apache镜像的基础上构建
[root@localhost opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd httpd c7128720f0e7 28 minutes ago 446MB
httpd centos 763533cd679e 4 hours ago 338MB
5.2 建立工作目录
[root@localhost opt]# mkdir systemctl
[root@localhost opt]# ls
apache cent containerd rh sshd systemctl xyw_nginx
[root@localhost opt]# cd systemctl/
[root@localhost systemctl]# ls
5.3 创建并编写Dockerfile文件
[root@localhost systemctl]# vim Dockerfile
FROM sshd:httpd
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/;for i in *;do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i;done);\ #进入/lib/systemd/system/sysinit.target.wants/路径,遍历其中所有文件/目录,匹配systemd-tmpfiles-setup.service,若没有匹配就删除;就是删除除了systemd-tmpfiles-setup.service之外的所有内容
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"] #初始化系统内核
5.4 生成镜像
[root@localhost systemctl]# docker build -t systemctl:sshd_httpd .
Sending build context to Docker daemon 2.56kB
Step 1/5 : FROM sshd:httpd
---> c7128720f0e7
Step 2/5 : ENV container docker
---> Running in cebbc2ebd2c5
Removing intermediate container cebbc2ebd2c5
---> 878355c73da9
Step 3/5 : RUN (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/*;
---> Running in 4562765304c4
Removing intermediate container 4562765304c4
---> 52323b073a77
Step 4/5 : VOLUME ["/sys/fs/cgroup"]
---> Running in 8a6bdac475f1
Removing intermediate container 8a6bdac475f1
---> b047abf3b238
Step 5/5 : CMD ["/usr/sbin/init"]
---> Running in a614e470c825
Removing intermediate container a614e470c825
---> 0cbba85e556d
Successfully built 0cbba85e556d
Successfully tagged systemctl:sshd_httpd
[root@localhost systemctl]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl sshd_httpd 0cbba85e556d 7 minutes ago 446MB
sshd httpd c7128720f0e7 57 minutes ago 446MB
httpd centos 763533cd679e 5 hours ago 338MB
5.5 启动容器
[root@localhost systemctl]# docker run --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:sshd_httpd /sbin/init & #privileged container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
[1] 70848
[root@localhost systemctl]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b458080a373 systemctl:sshd_httpd "/sbin/init" 36 seconds ago Up 35 seconds 22/tcp, 80/tcp relaxed_joliot
83dfba7ae1e1 sshd:httpd "/usr/sbin/sshd -D" 38 minutes ago Up 38 minutes 80/tcp, 0.0.0.0:49155->22/tcp funny_lichterman
0a7753b55e27 httpd:centos "/run.sh" 5 hours ago Up 5 hours 0.0.0.0:1122->80/tcp xenodochial_hamilton
5.6 验证systemctl
[root@localhost systemctl]# docker exec -it 6b458080a373 bash
[root@6b458080a373 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:sshd(8)
man:sshd_config(5)
[root@6b458080a373 /]# systemctl start sshd
[root@6b458080a373 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-03-24 08:57:50 UTC; 1s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 85 (sshd)
Tasks: 1 (limit: 12515)
Memory: 928.0K
CGroup: /docker/6b458080a373295f127d90525d8023573149e1690e37223b5b3a4b6d92624649/system.slice/sshd.service
└─85 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,ae>
Mar 24 08:57:50 6b458080a373 systemd[1]: Starting OpenSSH server daemon...
Mar 24 08:57:50 6b458080a373 sshd[85]: WARNING: 'UsePAM no' is not supported in Fedora and may cause several p>
Mar 24 08:57:50 6b458080a373 sshd[85]: Server listening on 0.0.0.0 port 22.
Mar 24 08:57:50 6b458080a373 sshd[85]: Server listening on :: port 22.
Mar 24 08:57:50 6b458080a373 systemd[1]: Started OpenSSH server daemon.
六、构建Nginx容器服务
Nginx是一款轻量级的web服务器
(1)占用内存少
(2)并发能力强
(3)可做反向代理
6.1 建立工作目录并下载Nginx源码包
[root@localhost opt]# mkdir nginx
[root@localhost opt]# ls
apache cent containerd nginx rh sshd systemctl xyw_nginx
[root@localhost opt]# cd nginx/
[root@localhost nginx]# rz -E
rz waiting to receive.
[root@localhost nginx]# ls
nginx-1.12.0.tar.gz
6.2 创建并编写Dockerfile文件
[root@localhost nginx]# vim Dockerfile
FROM centos:7 #这边我没有用前面的镜像,因为单纯centos与软件包有换件问题
MAINTAINER xyw
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORKDIR nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod +x /run.sh
CMD ["/run.sh"]
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
6.3 生成镜像
[root@localhost nginx]# docker build -t nginx:centos
6.4 启动容器并进行测试
[root@localhost nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx centos 9c40a0a51606 13 seconds ago 613MB
centos 7 8652b9f0cb4c 4 months ago 204MB
[root@localhost nginx]# docker run -d -P nginx:centos
f10a07f6768d5ae2fb8a87b47ca58b1ff1009bf842695c12e124d5efd21a5aa4
[root@localhost nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f10a07f6768d nginx:centos "/run.sh" 7 seconds ago Up 6 seconds 0.0.0.0:49165->80/tcp, 0.0.0.0:49164->443/tcp great_goodall
七、构建MySQL容器服务
MySQL是目前非常主流的关系型数据库
(1)体积小、速度快、成本低
(2)适合中小型企业
(3)常与PHP和Apache搭配使用
7.1 创建工作目录
[root@localhost local]# cd /opt/
[root@localhost opt]# ls
apache cent containerd nginx rh sshd systemctl tomcat xyw_nginx
[root@localhost opt]# mkdir mysql
[root@localhost opt]# ls
apache containerd nginx sshd tomcat
cent mysql rh systemctl xyw_nginx
[root@localhost opt]# cd mysql/
[root@localhost mysql]# ls
[root@localhost mysql]# rz -E
rz waiting to receive.
[root@localhost mysql]# ls
mysql-boost-5.7.20.tar.gz
7.2 创建并编写Dockerfile文件
vim Dockerfile
FROM centos:7
MAINTAINER xyw
RUN yum -y install \
gcc \
gcc-c++ \
ncurses \
ncurses-devel \
bison \
make \
cmake
RUN useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /usr/local/src
RUN mv mysql-5.7.20 mysql
WORKDIR /usr/local/src/mysql
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 -j2 && make install
RUN rm -rf /etc/my.cnf
WORKDIR /opt/mysql
ADD my.cnf /etc
RUN chown -R mysql:mysql /usr/local/mysql/
RUN chown mysql:mysql /etc/my.cnf
ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
WORKDIR /usr/local/mysql
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
EXPOSE 3306
RUN echo -e "#!/bin/sh \nsystemctl enable mysqld" > /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
CMD ["init"]
vim my.cnf
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set = utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character-set-server = utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_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
7.3 生成镜像
docker build -t mysql:centos
7.4 运行容器并验证
[root@ct mysql]# docker run --privileged -d -P mysql:centos #不降权运行
2ac58189ef379d32a10666d61cef1b90db71d7354f566e4245891df208791dd0
[root@ct mysql]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
beb31e01a458 mysql:centos "init" 3 seconds ago Up 3 seconds 0.0.0.0:49154->3306/tcp unruffled_cray
[root@ct mysql]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql centos ea13dcb259f5 6 minutes ago 10.3GB
centos 7 8652b9f0cb4c 4 months ago 204MB
[root@ct mysql]# docker exec -it beb31e01a458 bash
[root@beb31e01a458 mysql]# ls
COPYING bin lib mysql.sock.lock usr
COPYING-test data man mysqld.pid
README docs mysql-test share
README-test include mysql.sock support-files
[root@beb31e01a458 mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all privileges on *.* to 'root'@'%' identified by '123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all privileges on *.* to 'root'@'localhost' identified by '123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database xyw;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| xyw |
+--------------------+
5 rows in set (0.00 sec)
宿主机
yum -y install mariadb
[root@ct ~]# mysql -h 192.168.238.11 -uroot -P 49154 -p123123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.000 sec)
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| xyw |
+--------------------+
5 rows in set (0.000 sec)
八、构建tomcat容器服务
8.1 创建工作目录
mkdir tomcat
[root@localhost java]# cd /opt/tomcat/
[root@localhost tomcat]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u91-linux-x64.tar.gz
8.2 创建并编写Dockerfile文件
vim Dockerfile
FROM centos:7
MAINTAINER xyw
ADD jdk-8u91-linux-x64.tar.gz /usr/local
WORKDIR /usr/local
RUN mv jdk1.8.0_91 java
ENV JAVA_HOME /usr/local/java
ENV CLASS_PATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /usr/local
WORKDIR /usr/local
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
8.3 生成镜像
docker build -t tomcat:centos .
8.4 运行容器并验证
docker run -d -P tomcat:centos
1668e8f0faa81e7589e62a77244c4337fc78580591ad3c0b152c6e44df7f27f4
[root@localhost tomcat]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1668e8f0faa8 tomcat:centos "/usr/local/tomcat/b…" 4 seconds ago Up 4 seconds 0.0.0.0:49170->8080/tcp flamboyant_merkle
f10a07f6768d nginx:centos "/run.sh" 15 hours ago Up 15 hours 0.0.0.0:49165->80/tcp, 0.0.0.0:49164->443/tcp great_goodall
[root@localhost tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat centos 7f0be8896eb7 4 minutes ago 964MB
nginx centos 9c40a0a51606 15 hours ago 613MB
centos 7 8652b9f0cb4c 4 months ago 204MB