当前位置:   article > 正文

docker容器启动时自动启动脚本_Docker使用指南

docker容器启动时自动启动脚本

一、Docker安装

  • 在Ubuntu系统下安装:
apt-get install docker
  • 在Fedora/CentOS系统下安装:
  1. yum install docker
  2. dnf install docker # Fedora 25+
  • 在SUSE系统下安装:
zypper install docker

二、Docker容器

  • 首先启动Docker
  1. # 启动Docker
  2. systemctl start docker
  3. # 设置开机自启动,可选
  4. systemctl enable docker
  • 启动Docker测试容器
docker run "hello-world"
  • 在启动容器时,如果使用的镜像在本地不存在,会尝试从网络上获取。
  • 在一般情况下,启动Web服务的容器,使用以下命令:
  1. # -d:daemon,使容器在后台运行
  2. # -p:port,指定容器的端口,这里是将容器的80端口映射到主机的8001端口
  3. docker run -d -p 8001:80 "image_name"
  • 查看容器运行情况
docker ps
  • Docker会为容器分配一个Container ID和一个Container Name,Name可以在运行时通过-name自行指定,这两个可以用来标识容器。
  • 需要停止容器时,使用以下命令:
  1. docker stop "container_name"
  2. # 或使用ID查找
  3. docker stop "container_id"

三、Docker镜像

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

四、Dockerfile

  • Dockerfile本质上是一组命令集合,用于自动化构建镜像,下面以几个实例来说明Dockerfile的编写方法:
  • 实例一:LAMP(Linux+Apache+MySQL+PHP)环境配置
  1. # 来源镜像,一般可以使用标准的系统或者带有各种环境的系统
  2. # 显然这里使用的是标准的Ubuntu 14.04系统
  3. FROM ubuntu:14.04
  4. # 镜像作者
  5. MAINTAINER wrlu
  6. # 刷新日期
  7. ENV REFRESHED_AT 2018-08-05
  8. # 设定字符集
  9. ENV LANG C.UTF-8
  10. # RUN命令用于执行系统命令
  11. # 因为需要自动化安装,所以最好通过-y命令跳过确认
  12. # 更新APT软件源
  13. RUN apt-get update -y
  14. # 安装MySQL
  15. RUN apt-get -y install mysql-server
  16. # 安装Apache
  17. RUN apt-get -y install apache2
  18. # 安装PHP5
  19. RUN apt-get -y install php5 libapache2-mod-php5
  20. RUN apt-get install -yqq php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
  21. # 删除Apache2列出目录配置
  22. RUN sed -i 's/Options Indexes FollowSymLinks/Options None/' /etc/apache2/apache2.conf
  23. # COPY命令可以复制文件,但是似乎不能递归复制文件
  24. COPY IncludeAirline/* /var/www/html/
  25. COPY IncludeAirline/airlines/* /var/www/html/airlines/
  26. # 删除默认的主页
  27. RUN rm /var/www/html/index.html
  28. # 复制启动脚本
  29. COPY start.sh /root/start.sh
  30. RUN chmod +x /root/start.sh
  31. # 设置启动目录以及启动脚本
  32. ENTRYPOINT cd /root; ./start.sh
  33. # 设置需要暴露的端口
  34. EXPOSE 80,3306
  • 本例中还有一个启动脚本start.sh,用于导入数据库,编写如下:
  1. #!/bin/bash
  2. # 启动后延时
  3. sleep 1
  4. # 启动Apache服务器
  5. /etc/init.d/apache2 start
  6. # 启动MySQL数据库
  7. find /var/lib/mysql -type f -exec touch {} ; && service mysql start
  8. # 定义SQL文件路径
  9. sqlfile=/var/www/html/includeAirline.sql
  10. if [ -f $flagfile ]; then
  11. # 修改MySQL的密码
  12. mysqladmin -u root password "root"
  13. # 登录MySQL并导入SQL文件执行
  14. mysql -uroot -proot < $sqlfile
  15. # 删除SQL文件
  16. rm -f $sqlfile
  17. fi
  18. # 此处注意,如果命令执行完后脚本退出
  19. # 则Docker容器也会因为没有前台应用运行而中止
  20. # 所以这里使用一个前台命令来保活Docker容器
  21. tail -f /var/log/apache2/error.log
  • 实例二:PHP环境配置:
  1. # 来源镜像,自带Apache+PHP环境
  2. FROM php:7.0-apache
  3. MAINTAINER tl
  4. ENV REFRESHED_AT 20180803
  5. ENV LANG C.UTF‐8
  6. # ADD命令在COPY命令的基础上,具有自动解包tar的功能
  7. ADD web_tired.tar /var/www/html/
  8. EXPOSE 80
  • 实例三:LTMJ(Linux+Tomcat+MySQL+JSP)环境配置
  1. FROM ubuntu:16.04
  2. MAINTAINER wrlu
  3. ENV REFRESHED_AT 2018-08-05
  4. ENV LANG C.UTF-8
  5. RUN apt-get update -y
  6. RUN apt-get -y install mysql-server
  7. # 安装wget,因为Docker提供的镜像是最小镜像,所以用到的其他工具需要自行安装
  8. RUN apt-get -y install wget
  9. # 安装Java 8
  10. RUN apt-get -y install openjdk-8-jre
  11. # 下载Tomcat 8服务器
  12. RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
  13. # 解压tar.gz
  14. RUN tar -xzf apache-tomcat-8.5.32.tar.gz -C /root
  15. RUN mv /root/apache-tomcat-8.5.32 /root/tomcat
  16. # 删除默认页面
  17. RUN rm -rf /root/tomcat/webapps/*
  18. # 拷贝war文件
  19. COPY CAAC-SQL-Injection.war /root/tomcat/webapps/
  20. COPY wafwtf.sql /root/
  21. COPY start.sh /root/start.sh
  22. RUN chmod +x /root/start.sh
  23. ENTRYPOINT cd /root; ./start.sh
  24. # Tomcat使用8080端口,不同于Apache
  25. EXPOSE 8080
  • 启动脚本如下:
  1. #!/bin/bash
  2. sleep 1
  3. find /var/lib/mysql -type f -exec touch {} ; && service mysql start
  4. chmod +x /root/tomcat/bin/startup.sh
  5. # 启动Tomcat服务器
  6. /root/tomcat/bin/startup.sh
  7. sqlfile=/root/wafwtf.sql
  8. if [ -f $flagfile ]; then
  9. mysqladmin -u root password "root"
  10. mysql -uroot -proot < $sqlfile
  11. rm -f $sqlfile
  12. fi
  13. # 容器保活
  14. tail -f /root/tomcat/conf/server.xml
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号