一、Docker安装

  • Docker是目前最常用的自动化容器系统,可以实现自动化环境部署、迁移等功能,本文叙述了Docker的基本使用方法。
  • 在Ubuntu系统下安装:
  1. apt-get install docker.io
  • 在Fedora/CentOS系统下安装:
  1. yum install docker
  2. dnf install docker # Fedora 25+
  • 在SUSE系统下安装:
  1. zypper install docker

二、Docker容器

  • 首先启动Docker
  1. # 启动Docker
  2. systemctl start docker
  3. # 设置开机自启动,可选
  4. systemctl enable docker
  • 启动Docker测试容器
  1. docker run "hello-world"
  • 在启动容器时,如果使用的镜像在本地不存在,会尝试从网络上获取。
  • 在一般情况下,启动Web服务的容器,使用以下命令:
  1. # -d:daemon,使容器在后台运行
  2. # -p:port,指定容器的端口,这里是将容器的80端口映射到主机的8001端口
  3. docker run -d -p 8001:80 "image_name"
  4. # -p参数可以多次使用,也可以指定一个端口范围
  5. docker run -d -p 8080-8083:8080-8083 -p 80:80 -p 443:443 "image_name"
  • 查看容器运行情况
  1. docker ps
  2. # 也查看已经停止的容器
  3. docker ps -a
  • Docker会为容器分配一个Container ID和一个Container Name,Name可以在运行时通过-name自行指定,这两个可以用来标识容器。
  • 需要停止容器时,使用以下命令:
  1. docker stop "container_name"
  2. # 或使用ID查找,仅输入ID的前几位即可
  3. docker stop "container_id"
  • 删除容器
  1. docker rm "container_name"
  2. docker rm "container_id"
  3. # 删除所有容器
  4. # docker rm $(docker ps -a)
  • 在容器运行的时候,可以用exec命令进入容器的Shell中进行一些操作
  1. docker exec -it "container_id" /bin/bash

三、Docker镜像

  • Docker容器是运行的Docker镜像实例,一般情况下,我们需要制作自己的Docker镜像。
  • Docker镜像的制作依赖于Dockerfile,我们稍后在讨论Dockerfile的编写,这里假定我们有一个编写好的Dockerfile。
  • 下面的命令将在当前路径查找Dockerfile并构建一个名为“image_name”的镜像。
  1. docker build -t "image_name" .
  • 在构建过程中需要在网络上下载来源镜像,可能需要一段时间。
  • 如果Dockerfile中的命令都正确结束(Exit code 0),那么Docker镜像的构建也将顺利完成,我们可以通过下面的命令查看我们的所有镜像:
  1. docker images
  • 在镜像构建过程中会生成一些中间镜像,可使用-a参数查看
  1. docker images -a
  • 删除不需要的镜像,注意镜像之间是有依赖关系的
  1. docker rmi "image_id"
  • 我们还可以导出我们制作好的Docker镜像,下面的命令将image_name镜像导出为image_name.tar
  1. docker save "image_name" > image_name.tar
  • 在另一台机器上,我们不需要网络就可以导入并使用该镜像,当然两台机器必须是相同的体系结构(同为x86或ARM):
  1. docker load < image_name.tar

四、Dockerfile

  • Dockerfile本质上是一组命令集合,用于自动化构建镜像
  • 来源镜像,一般可以使用标准的系统或者带有各种环境的系统
  1. FROM ubuntu:latest
  • 可以指定镜像的作者、日期、字符集等等
  1. MAINTAINER wrlu
  2. ENV REFRESHED_AT 2019-06-05
  3. ENV LANG C.UTF-8
  • 对于Debian的镜像可以设置禁止交互,这样制作镜像的时候就不会卡住
  1. ENV DEBIAN_FRONTEND=noninteractive
  • PHP7配置实例
  1. RUN apt-get -y install php7.2 libapache2-mod-php7.2
  2. RUN apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php7.2-imagick php7.2-imap php7.2-memcache php7.2-ps php7.2-pspell php7.2-recode php7.2-snmp php7.2-tidy php7.2-xmlrpc php7.2-xsl
  • 一般情况下,为了使某些服务以低权限运行,可以创建新的用户
  1. RUN useradd test
  2. RUN mkdir /home/test/
  3. RUN chown -R test:test /var/www/html/example
  • Java 11以及Tomcat 9配置实例
  1. RUN apt-get -y install openjdk-11-jre
  2. COPY tomcat/apache-tomcat-9.0.20.tar.gz /home/test/
  3. RUN tar -xzf /home/test/apache-tomcat-9.0.20.tar.gz -C /home/test/
  4. RUN mv /home/test/apache-tomcat-9.0.20/ /home/test/tomcat/
  5. RUN rm /home/test/apache-tomcat-9.0.20.tar.gz
  6. RUN rm -rf /home/test/tomcat/webapps/*
  7. COPY source/SecIoT.war /home/test/tomcat/webapps/
  • 启动脚本配置
  1. COPY startup.sh /root/startup.sh
  2. ENTRYPOINT bash /root/startup.sh
  • 端口暴露配置
  1. EXPOSE 80,443
  2. EXPOSE 8080-8083
  3. EXPOSE 9000-9999
  • 启动脚本,完成Apache,MySQL,Tomcat等启动
  1. #!/bin/bash
  2. sleep 1
  3. /etc/init.d/apache2 start
  4. service mysql start
  5. # 阻塞命令,用于阻止容器退出
  6. tail -f /var/log/apache2/error.log
  1. bash /home/test/tomcat/bin/startup.sh
  2. sleep 10
  3. tail -f /home/test/tomcat/logs/catalina.out
  • MySQL配置,新版本不能再使用mysqladmin配置口令了,需要借助sql文件进行
  1. RUN apt-get -y install mysql-server
  2. COPY test.sql /root/test.sql
  3. COPY change_password.sql /root/change_password.sql
  1. #!/bin/bash
  2. service mysql start
  3. mysql -uroot < /root/wp.sql
  4. rm /root/wp.sql
  5. mysql -uroot < /root/change_password.sql
  6. rm /root/change_password.sql
  1. use mysql;
  2. update user set authentication_string=PASSWORD("YOUR_MYSQL_PASSWORD") where User='root';
  3. update user set plugin="mysql_native_password";
  4. flush privileges;
  • 在启动脚本中设置环境变量
  1. export PATH=$PATH:/home/test/apps/jadx/bin/