什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
来吧!展示!!
SSH
编写 Dockerfile
[root@5centos opt]# mkdir sshd
[root@5centos opt]# cd sshd/
[root@5centos sshd]# vim Dockerfile
##基础镜像
FROM centos:7
##描述信息
MAINTAINER openssh
##更新源
RUN yum -y update
##安装环境及软件
RUN yum -y install openssh* net-tools lsof telnet passwd
##设置root密码
RUN echo "123123" | passwd --stdin root
##禁用ssh中的pam验证
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/ssh_config
##创建非对称密钥,并指定文件路径
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
##禁用pam的ssh的pam会话模块
RUN sed -i '12s/^/#/g' /etc/pam.d/sshd
##创建ssh工作目录和权限设置
RUN mkdir -p /root/.ssh && chown root:root /root && chmod 700 /root/.ssh
##开放内部端口
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
生成镜像
[root@5centos sshd]# docker build -t sshd:open .
[root@5centos sshd]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sshd open 62c4eb232aee About a minute ago 481MB
centos 7 7e6257c9f8d8 5 weeks ago
启动容器,随机端口映射
[root@5centos sshd]# docker run -d -P sshd:open
c4e98e6e86286b8e66c1325b643f3e0b9ba0aa9797ea19d6b2339002610af8d7
[root@5centos sshd]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4e98e6e8628 sshd:open "/usr/sbin/sshd -D" About a minute ago Up About a minute 0.0.0.0:32768->22/tcp friendly_brahmagupta
验证
[root@5centos sshd]# ssh localhost -p 32768
The authenticity of host '[localhost]:32768 ([::1]:32768)' can't be established.
RSA key fingerprint is SHA256:L19kQ0f8kPOctutod+O2x9pAbaqx+3TT8VB1Srj/gSc.
RSA key fingerprint is MD5:f8:6b:2b:c6:c1:d8:b8:9c:41:dc:27:a3:2b:3e:81:2d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:32768' (RSA) to the list of known hosts.
root@localhost's password:
[root@c4e98e6e8628 ~]#
systemctl
[root@5centos opt]# mkdir system
[root@5centos opt]# cd system/
[root@5centos system]# vim Dockerfile
FROM sshd:open
MAINTAINER sshd:open systemctl
ENV container docker
RUN yum -y install vim
##执行先到指定目录,进行for循环遍历目录下所有文件并删除指定的文件。之后进行一系列的删除
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/*;
##创建一个挂在卷
VOLUME [ "/sys/fs/cgroup" ]
##init指执行初始化
CMD ["/usr/sbin/init"]
生成镜像
[root@5centos system]# docker build -t systemctl:open .
[root@5centos system]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
systemctl open 03a641b3630c 27 seconds ago 592MB
sshd open 62c4eb232aee 10 minutes ago 481MB
centos 7 7e6257c9f8d8 5 weeks ago
创建容器
## & 后台运行
[root@5centos system]# docker run --privileged -it --name systemctl -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:open sbin/init &
[1] 23563
验证
[root@5centos system]# docker exec -it systemctl /bin/bash
[root@502aafc5a788 /]# systemctl start sshd
[root@502aafc5a788 /]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2020-09-21 10:46:46 UTC; 8s ago
Nginx
[root@5centos system]# cd ..
[root@5centos opt]# mkdir nginx
[root@5centos opt]# vim Dockerfile
FROM systemctl:open
MAINTAINER sys from nginx
RUN yum -y install gcc gcc-c++ pcre* make cmake zlib-devel openssh* net-tools
ADD nginx-1.12.2.tar.gz /usr/local/src
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.12.2
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 755 /run.sh
CMD ["/run.sh"]
[root@5centos nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@5centos nginx]# rz -E
rz waiting to receive.
[root@5centos nginx]# ls
Dockerfile nginx-1.12.2.tar.gz run.sh
创建镜像
扫描二维码关注公众号,回复:
11783012 查看本文章
[root@5centos nginx]# docker build -t nginx:open .
[root@5centos nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx open 6120905a3254 35 seconds ago 805MB
systemctl open 03a641b3630c 17 minutes ago
创建容器,随机端口
[root@5centos nginx]# docker run -itd -P nginx:open /bin/bash
b628f5f5ef1019d5e08f4944c8258ca89928a74398590df43ded4bc7efcc0576
[root@5centos nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b628f5f5ef10 nginx:open "/bin/bash" 25 seconds ago Up 24 seconds 0.0.0.0:32771->22/tcp, 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp quirky_liskov
Tomcat
创建目录并编写Dockerfile文件,上传相关文件
[root@5centos opt]# mkdir tomcat
[root@5centos opt]# cd tomcat/
[root@5centos tomcat]# vim Dockerfile
FROM centos:7
MAINTAINER TOMCATcentos7
RUN yum -y update
RUN yum -y install jre*
ADD apache-tomcat-9.0.16.tar.gz /opt
RUN mv /opt/apache-tomcat-9.0.16 /usr/local/tomcat9
EXPOSE 8080
ENTRYPOIINT ["/usr/local/tomcat9/bin/catalina.sh","run"]
[root@5centos tomcat]# ls
apache-tomcat-9.0.16.tar.gz Dockerfile
创建镜像,开启容器
[root@5centos tomcat]# docker build -t tomcat:open .
[root@5centos tomcat]# docker run -it -P tomcat:open /bin/bash
[root@5centos ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b9713c0d05c tomcat:open "/usr/local/tomcat9/…" 22 seconds ago Up 21 seconds 0.0.0.0:32772->8080/tcp elastic_wilbur
Mysql
[root@5centos opt]# mkdir mysql
[root@5centos opt]# cd mysql/
[root@5centos mysql]# vim Dockerfile
[root@docker tomcat]# mkdir /mysql
[root@docker tomcat]# cd /mysql/
[root@docker mysql]# vim Dockerfile
FROM centos:7
MAINTAINER build image mysqld <tang>
EXPOSE 3306
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /usr/local/src/mysql-5.7.20
RUN useradd mysql -M -s /sbin/nologin
RUN yum -y install gcc \
gcc-c++ \
make \
ncurses \
ncurses-devel \
bison \
cmake
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_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
RUN make && make install
RUN chown -R mysql:mysql /usr/local/mysql/
#RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/my.cnf '//也可以先删掉文件,再添加进去'
RUN chown mysql:mysql /etc/my.cnf
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/lib
RUN /usr/local/mysql/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 /lib/systemd/system/
ADD run.sh /run.sh
RUN chmod +x /run.sh
#RUN sh /usr/local/src/run.sh
CMD ["/run.sh"]
[root@5centos mysql]# vim my.cnf
[client]
port = 3306
default-character-set=utf8
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
[root@5centos mysql]# vim run.sh
#!/bin/bash
/usr/local/mysql/bin/mysqld
[root@5centos mysql]# ls
Dockerfile my.cnf mysql-boost-5.7.20.tar.gz run.sh
生成镜像
##要等很久……因为mysql……
[root@5centos mysql]# docker build -t mysql:open .
生成容器
[root@5centos mysql]# docker run -d -P --privileged mysql:test
2cae858f9ca5202cdc111b3117b92fcb97b6448e51e8d938a6a9cd6236b783a4
验证
[root@5centos mysql]# docker exec -it 2cae858f9ca5 /bin/bash
[root@2cae858f9ca5 mysql-5.7.20]# mysql -u root -p -P 32769
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@2cae858f9ca5 mysql-5.7.20]# mysql -u root -p -P 32769
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)