docker数据管理(二)

一、docker操作常用的指令

指令功能
FROM 镜像指定新镜像所基于的基础镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像维护信息
RUN 命令在基于的镜像上执行命令,并提交到新的镜像中。类似于cd cp
ENTRYPOINT["要运行的程序","参数1","参数2"]设定容器第一个要运行的命令机器参数。可以通过使用命令docker run --entrypoint来覆盖镜像中的entrypoint指令中的内容。举例:ENTRYPOINT ["rm", "-rf", "/*"]
CMD["要运行的程序","参数1","参数2"]

shell形式:CMD命令 参数1 参数2

启动容器时默认执行的命令或者脚本,Dockerfile只能有一条CMD命令如果指定多条命令,只执行最后一条命令。
如果在docker run时指定了命令或者镜像中有ENTRYPOINT,那么CMD就会被覆盖

CMD 可以为 ENTRYPOINT 指令提供默认参数。举例:CMD ["cp" ,"-rf",“*”]

EXPOSE 端口号指定新镜像到Docker时要开启的端口。举例:EXPOSE 8090
ENV 环境变量 变量值

设置一个环境变量的值,会被后面的RUN使用

举例:linxu PATH=$PATH:/opt

           ENV PATH $PATH:/opt

ADD 源文件/目录 目标文件/目录

将源文件复制到镜像中,源文件要与Dockerfile位于相同目录中,或者是一个 URL。

注意事项

1.如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。
如果目标路径不存在,则会自动创建目标路径。

2.如果源路径是个文件,且目标路径是不以 / 结尾,则docker会把目标路径当作一个文件。

  • 如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
  • 如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
  • 如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意这种情况下,最好显示的以 / 结尾,以避免混淆。

3.如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。

4.如果源文件是个归档文件(压缩文件),则docker会自动帮解压。URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压。

COPY 源文件/目录 目标文件/目录只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile 在相同的目录中
VOLUME  ["目录"]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径 /home为后续的 RUN、CMD、ENTRYPOINT 指定工作目录
ONBUILD 命令(防盗镜像)指定所生成的镜像作为一个基础镜像时所要运行的命令。
当在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响。
但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令。
HEALTHCHECK(健康检查)检查相关的镜像或者是已创建的dockerfile

二、编写docker的严格规范

  • 第一行必须使用 FROM 指令指明所基于的镜像名称
  • 之后使用 MAINTAINER 指令说明维护该镜像的用户信息
  • 然后是镜像操作相关指令,如 RUN 指令。每运行一条指令,都会给基础镜像添加新的一层
  • 最后使用 CMD 指令指定启动容器时要运行的命令操作
     

三、Docker实验部署

  3.1 前期准备

systemctl stop firewalld

setenforce 0

  3.2 创建并进入文件夹

mkdir  /opt/apache


cd  /opt/apache

  3.3 编辑Dockerfile

  3.3.1 Dockerfile方法一

vim Dockerfile

FROM centos:7                                               #维护镜像的用户信息
MAINTAINER this is apache image <cht>      #镜像操作指令安装apache软件
RUN yum -y update                                        #更新
RUN yum -y install httpd                                 #yum安装httpd
EXPOSE 80                                                    #开启 80 端口
ADD index.html /var/www/html/index.html      #复制网站首页文件
ADD run.sh /run.sh                                         #将执行脚本复制到镜像中
RUN chmod 755 /run.sh                                 #为脚本增加执行权限
CMD ["/run.sh"]                                               #启动容器时执行脚本

  3.3.2 Dockerfile方法二

vim Dockerfile

FROM centos:7                                               #维护镜像的用户信息
MAINTAINER this is apache image <cht>      #镜像操作指令安装apache软件
RUN yum -y update                                        #更新
RUN yum -y install httpd                                 #yum安装httpd
EXPOSE 80                                                    #开启 80 端口
ADD index.html /var/www/html/index.html      #复制网站首页文件

ENTRYPOINT [ "/usr/sbin/apachectl" ]           #容器启动时第一个运行的命令及其参数
CMD ["-D", "FOREGROUND"]                       #默认讲第一个容器的执行的容器或脚本放到前面运行
        FOREGROUND:放到前面去运行        

  3.4 编辑run脚本

vim run.sh

#!/bin/bash

rm -rf /run/httpd/*

/usr/sbin/apachectl -D FOREGROUND

  3.5 编辑index.html

echo "xxx" > index.html

  3.6 生成镜像

docker build -t httpd:centos .

  3.7 后台运行新镜像容器

docker run -d -p 1216:80 hhtpd:centos

   3.8 网页测试

    在网页输入本机的IP地址:端口号1216

四、构建SSH镜像

  4.1 前期准备

systemctl stop firewalld

setenforce 0

  4.2 创建并进入文件夹

mkdir /opt/sshd

cd /opt/sshd

  4.3 编辑Docker

vim Dockerfile


FROM centos:7
MAINTAINER this is ssh image <xxx>
RUN yum -y update
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'xxx' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd
RUN ssh-keygen -t rsa -A
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd" , "-D"]

  4.4 生成镜像

docker build -t sshd:centos .

  4.5 启动容器同时修改root密码

docker run -d -P sshd:centos

ssh localhost -p 端口号

五、构建systemctl镜像

  5.1 前期准备

systemctl stop firewalld

setenforce 0

  5.2 创建并进入文件夹

mkdir /opt/systemctl

cd /opt/systemctl

  5.3 编辑Dockerfile

vim Dockerfile

FROM sshd:centos
MAINTAINER this is systemctl image <xxx>
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/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
#CMD ["/usr/sbin/init"]

  5.4 生成镜像并初始化启动容器进行挂载操作

docker build -t systemd:centos .

docker run --privileged -d -P /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init

docker ps -a

  5.5 进入容器查看状态

docker exec -it 容器ID号 bash

六、构建NGINX镜像

  6.1 关闭防火墙

systemctl stop firewalld

setenforce 0

  6.2 创建并加入文件夹,压缩包迁移

mkdir /opt/nginx

cd /opt/nginx

cp /opt/nginx-1.22.0.tar.gz /opt/nginx

  6.3 编辑Dockerfile

vim Dockerfile

FROM centos:7
MAINTAINER this is nginx image <xxx>
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 /opt/
WORKDIR /opt/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 755 /run.sh
CMD ["/run.sh"]
#CMD ["/usr/local/sbin/nginx", "-g", "daemon off;"]

  6.4 编辑run脚本

vim run.sh

#!/bin/bash

/usr/local/nginx/sbin/nginx

  6.5 生成镜像

docker build -t nginx:centos .

  6.6 启动镜像并在后台运行

docker run -d -P nginx:centos

docker ps -a

  6.7 网页测试

    在网页上输入自己的IP地址和端口号

七、构建tomcat镜像

  7.1 前期准备

systemctl stop firewalld

setenforce 0

  7.2 创建并进入tomcat进行相关操作

    将tomcat和jdk压缩包下载本地文件夹下

mkdir /opt/tomcat

cd /opt/tomcat/

在官方网站下载对应压缩包和源码包

  7.3 编辑Dockerfile

vim Dockerfile

FROM centos:7
MAINTAINER this is tomcat image <xxx>
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]

  7.4 生成镜像

docker build -t tomcat:centos .

  7.5 创建容器并在后台运行

docker run -d --name xxx -p 1216:8080 tomcat:centos

docker ps -a

  7.6 网页测试

    在网页上测试自己的本机IP:端口号

八、构建mysql镜像

  8.1 前期准备

systemctl stop firewalld

setenforce 0

  8.2 创建并加入文件夹

mkdir /opt/mysqld

cd /opt/mysqld/

  8.3 编辑mysql核心文件

vim my.cnf

FROM centos:7
MAINTAINER this is mysql image <xxx>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++

make;useradd -M -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_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 install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service

/usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD ["/usr/sbin/init"]

  8.4 编辑run脚本

vim run.sh

#!/bin/bash

/usr/local/mysql/bin/mysqld

systemctl enable mysqld

  8.5 编辑mysql核心文件

  8.6 生成镜像

docker build -t mysql:centos .

  8.7 启动容器并初始化

docker run --name=mysql_server -d -P --privileged mysql:centos /usr/sbin/init

  8.8 登陆mysql修改密码

mysql -uroot -p

回车即可

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

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

flush privileges

  8.9 测试机远程测试

    再开启一台虚拟机启动mysql服务远程测试是否能远程连接到配置机的mysql

systenctll stop firewalld

setenforce 0

systemctl start mysqld

mysql -h 配置机的IP地址 -u root -P 32772 -pabc123

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值