(重点)实验——使用Dockerfile搭建服务

一、构建SSH镜像

[root@localhost ~]# mkdir sshd
[root@localhost ~]# cd sshd/

[root@localhost sshd]# vim Dockerfile

FROM centos:7
MAINTAINER The CentOS Project <cloud-centos>
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/ssh_config
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
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]


'//生成镜像'
[root@localhost sshd]# docker build -t sshd:new .

'报错:'
[root@localhost sshd]# docker build -t sshd:new
"docker build" requires exactly 1 argument.
See 'docker build --help'.

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile


[root@localhost sshd]# docker build -t sshd:new.
"docker build" requires exactly 1 argument.
See 'docker build --help'.

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile


'解决方法:'
最后面的点需要空格
[root@localhost sshd]# docker build -t sshd:new .


'报错:'
Step 8/11 : RUN sed -i '^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
 ---> Running in 893ec686acb7
sed: -e expression #1, char 1: unknown command: `^'
The command '/bin/sh -c sed -i '^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd' returned a non-zero code: 1

'解决方法:'
“^”前面少了个“/”
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd

'//启动容器并修改root密码'
[root@localhost sshd]# docker run -d -P sshd:new
002755a9729502c8f91afc2e4a48d6988e23f9fa3a259ca25a48e82e7d7f25c4


'//可以查看随机端口号'
[root@localhost sshd]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
002755a97295        sshd:new            "/usr/sbin/sshd -D"   4 seconds ago       Up 4 seconds        0.0.0.0:32768->22/tcp   modest_joliot

[root@localhost sshd]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sshd                new                 bcc84d67952d        36 seconds ago      481MB
centos              7                   7e6257c9f8d8        3 months ago        203MB


[root@localhost sshd]# ssh localhost -p 32768
The authenticity of host '[localhost]:32768 ([::1]:32768)' can't be established.
RSA key fingerprint is SHA256:8hd9CfgMyZgeJn9nOVnPDudBczEhlVeqM38o8zchkQE.
RSA key fingerprint is MD5:bb:8a:a0:f6:04:73:7b:e3:3a:71:40:d4:79:f1:43:a1.
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@002755a97295 ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 50  bytes 6570 (6.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 36  bytes 5335 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

二、构建systemctl镜像

[root@localhost ~]# mkdir systemctl
[root@localhost ~]# cd systemctl/

[root@localhost systemctl]# vim Dockerfile

FROM sshd:new
ENV container docker
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/systec/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

[root@localhost systemctl]# docker build -t systemd:new .

[root@localhost systemctl]# cd /opt
[root@localhost opt]# mkdir share

[root@localhost opt]# docker run --privileged -it -v /opt/share/:/opt/share systemd:new &
[2] 42792

[root@localhost opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
2b68b976a64b        systemd:new         "/usr/sbin/init"      4 seconds ago       Up 3 seconds        22/tcp                  ecstatic_kilby

[root@localhost opt]# docker exec -it 2b68b976a64b bash

[root@2b68b976a64b /]# cd /opt/share/
[root@2b68b976a64b share]# ls
[root@2b68b976a64b share]# touch 111.txt
[root@2b68b976a64b share]# exit
exit

[root@localhost opt]# cd share/
[root@localhost share]# ls
111.txt

三、构建Nginx镜像

[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx/
[root@localhost nginx]# vim Dockerfile

FROM centos:7
MAINTAINER this is nginx image <zhou>
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.15.9.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.15.9
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@localhost nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

[root@localhost nginx]# docker build -t nginx:new .

[root@localhost nginx]# docker run -d -P nginx:new

[root@localhost nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                                           NAMES
756629e7baef        nginx:new           "/run.sh"             11 seconds ago      Up 10 seconds       0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp   tender_ramanujan

四、构建Tomcat镜像

[root@localhost ~]# mkdir tomcat
[root@localhost ~]# cd tomcat/

将两个安装包放进该目录下
[root@localhost tomcat]# vim Dockerfile

FROM centos:7
MAINTAINER this is tomcat image <zhou>
ADD jdk-8u201-linux-x64.rpm /root/tomcat/
WORKDIR /root/tomcat/
RUN rpm -ivh jdk-8u201-linux-x64.rpm
WORKDIR /usr/java/jdk1.8.0_201-amd64/
RUN echo -e 'export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64\nexport CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar\nexport PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
RUN source /etc/profile
ADD apache-tomcat-9.0.16.tar.gz /root/tomcat/
WORKDIR /root/tomcat/
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat8
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/startup.sh"]
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]

[root@localhost tomcat]# docker build -t tomcat:new .

[root@localhost tomcat]# docker run -d --name tomcat01 -p 1216:8080 tomcat:new

五、构建Mysql镜像

[root@localhost ~]# mkdir mysql
[root@localhost ~]# cd mysql/

[root@localhost mysql]# vim Dockerfile
FROM centos:7
MAINTAINER this is mysql image <zhou>
RUN yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++
RUN useradd -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
WORKDIR /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_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 install
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc
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"]
#CMD ["mysqld_safe"]

[root@localhost mysql]# docker build -t mysql:new .

[root@localhost mysql]# docker run --name mysql01 -d -P --privileged mysql:new

[root@localhost mysql]# docker exec -it f874caefc36c /bin/bash

grant all privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';

宿主机:mysql -h 20.0.0.21 -uroot -P 32768 -pabc123

六、私有仓库建立

[root@localhost ~]# mkdir siyou
[root@localhost ~]# cd siyou/
[root@localhost siyou]# docker pull registry
[root@localhost siyou]# vim /etc/docker/daemon.json 

[root@localhost siyou]# systemctl restart docker
[root@localhost siyou]# systemctl status docker
[root@localhost siyou]# docker create -it registry /bin/bash
[root@localhost siyou]# docker ps -a
[root@localhost siyou]# docker start 178f1ce31cab
[root@localhost siyou]# docker ps -a

'//宿主机的/data/registry自动创建挂载容器中的/tmp/registry'
[root@localhost siyou]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
[root@localhost siyou]# docker ps -a
[root@localhost siyou]# docker images
[root@localhost siyou]# docker pull nginx
[root@localhost siyou]# docker images

'//更改标记为20.0.0.21:5000/nginx'
[root@localhost siyou]# docker tag nginx:latest 20.0.0.21:5000/nginx
[root@localhost siyou]# docker images

'//上传'
[root@localhost siyou]# docker push 20.0.0.21:5000/nginx

'//获取私有仓库列表'
[root@localhost siyou]# curl -XGET http://20.0.0.21:5000/v2/_catalog

'//显示上传成功'
{"repositories":["nginx"]}

'//测试私有仓库下载'
[root@localhost siyou]# docker pull 20.0.0.21:5000/nginx
[root@localhost siyou]# docker images

七、Docker 数据卷

docker pull centos:7

'//宿主机目录/var/www 挂载容器中的data1'
docker run -v /var/www/:/data1 --name web1 -it centos:7 /bin/bash

cd /data1/
touch test123

'//返回宿主机进行查看'
ls /var/www/

7.1 数据卷容器

///数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash

//新容器挂载数据卷容器web100
docker run -it --volumes-from web100 --name db1 centos:7 /bin/bash

7.2 端口映射

docker run -d -P httpd:centos

docker run -d -p 49280:80 httpd:centos

docker ps -a

7.3 容器互联(使用centos镜像)

'//创建并运行容器取名web1,端口号自动映射'
docker run -itd -P --name web11 centos:7 /bin/bash

'//创建并运行容器取名web2,链接到web1和其通信'

docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash

'进web2 容器 ping web1'

--link name:alias     --link 容器名:别名

八、构建apache镜像

mkdir apache
cd apache/

vim Dockerfile
FROM centos:7
MAINTAINER this is apache image <zhou>
RUN yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl
ADD apr-1.6.2.tar.gz /root/apache
ADD apr-util-1.6.0.tar.gz /root/apache
ADD httpd-2.4.29.tar.bz2 /root/apache
WORKDIR /root/apache
RUN mv apr-1.6.2 /root/apache/httpd-2.4.29/srclib/apr
RUN mv apr-util-1.6.0 /root/apache/httpd-2.4.29/srclib/apr-util
WORKDIR /root/apache/httpd-2.4.29/
RUN ./configure \
--prefix=/usr/local/httpd \
--enable-so \
--enable-rewrite \
--enable-charset-lite \
--enable-cgi && make -j3 && make install
RUN ln -s /usr/local/httpd/conf/httpd.conf /etc/
RUN ln -s /usr/local/httpd/bin/* /usr/local/bin/
WORKDIR /lib/systemd/system/
ADD httpd.service /lib/systemd/system/
RUN echo -e "#!/bin/sh \nsystemctl enable httpd" > /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
EXPOSE 80
CMD ["init"]


[root@localhost apache]# docker build -t apache:new .
[root@localhost apache]# docker run --privileged -d -P apache:new /usr/sbin/init

'注:apache环境是 /uer/sbin/init'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值