Loading...

Loading...

This page has no en version yet, showing default language content

关于docker安装,查看,镜像管理,以及一个实用Dockerfile, LAMP,PHP,LTMJ。

  • 关于本blog,图床一般使用github,已经配置了CDN,如果图片还是未显示请自行代理解决

Docker安装

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

Docker容器

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

Docker镜像

Dokerfile编译镜像

  • 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)环境配置

# 来源镜像,一般可以使用标准的系统或者带有各种环境的系统
# 显然这里使用的是标准的Ubuntu 14.04系统
FROM ubuntu:14.04
# 镜像作者
MAINTAINER wrlu
# 刷新日期
ENV REFRESHED_AT 2018-08-05
# 设定字符集
ENV LANG C.UTF-8
# RUN命令用于执行系统命令
# 因为需要自动化安装,所以最好通过-y命令跳过确认
# 更新APT软件源
RUN apt-get update -y
# 安装MySQL
RUN apt-get -y install mysql-server
# 安装Apache
RUN apt-get -y install apache2
# 安装PHP5
RUN apt-get -y install php5 libapache2-mod-php5
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
# 删除Apache2列出目录配置
RUN sed -i 's/Options Indexes FollowSymLinks/Options None/' /etc/apache2/apache2.conf
# COPY命令可以复制文件,但是似乎不能递归复制文件
COPY IncludeAirline/* /var/www/html/
COPY IncludeAirline/airlines/* /var/www/html/airlines/
# 删除默认的主页
RUN rm /var/www/html/index.html
# 复制启动脚本
COPY start.sh /root/start.sh
RUN chmod +x /root/start.sh
# 设置启动目录以及启动脚本
ENTRYPOINT cd /root; ./start.sh
# 设置需要暴露的端口
EXPOSE 80,3306 
  • 本例中还有一个启动脚本start.sh,用于导入数据库,编写如下:
#!/bin/bash
# 启动后延时
sleep 1
# 启动Apache服务器
/etc/init.d/apache2 start
# 启动MySQL数据库
find /var/lib/mysql -type f -exec touch {} ; && service mysql start
# 定义SQL文件路径
sqlfile=/var/www/html/includeAirline.sql
if [ -f $flagfile ]; then
	# 修改MySQL的密码
    mysqladmin -u root password "root"
    # 登录MySQL并导入SQL文件执行
    mysql -uroot -proot < $sqlfile
    # 删除SQL文件
    rm -f $sqlfile
fi
# 此处注意,如果命令执行完后脚本退出
# 则Docker容器也会因为没有前台应用运行而中止
# 所以这里使用一个前台命令来保活Docker容器
tail -f /var/log/apache2/error.log

实例二:PHP环境配置:

# 来源镜像,自带Apache+PHP环境
FROM php:7.0-apache
MAINTAINER tl
ENV REFRESHED_AT 2018‐08‐03
ENV LANG C.UTF‐8
# ADD命令在COPY命令的基础上,具有自动解包tar的功能
ADD web_tired.tar /var/www/html/
EXPOSE 80

实例三:LTMJ(Linux+Tomcat+MySQL+JSP)环境配置

FROM ubuntu:16.04
MAINTAINER wrlu
ENV REFRESHED_AT 2018-08-05
ENV LANG C.UTF-8
RUN apt-get update -y
RUN apt-get -y install mysql-server
# 安装wget,因为Docker提供的镜像是最小镜像,所以用到的其他工具需要自行安装
RUN apt-get -y install wget
# 安装Java 8
RUN apt-get -y install openjdk-8-jre
# 下载Tomcat 8服务器
RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
# 解压tar.gz
RUN tar -xzf apache-tomcat-8.5.32.tar.gz -C /root
RUN mv /root/apache-tomcat-8.5.32 /root/tomcat
# 删除默认页面
RUN rm -rf /root/tomcat/webapps/*
# 拷贝war文件
COPY CAAC-SQL-Injection.war /root/tomcat/webapps/
COPY wafwtf.sql /root/
COPY start.sh /root/start.sh
RUN chmod +x /root/start.sh
ENTRYPOINT cd /root; ./start.sh
# Tomcat使用8080端口,不同于Apache
EXPOSE 8080
  • 启动脚本如下:
#!/bin/bash
sleep 1
find /var/lib/mysql -type f -exec touch {} ; && service mysql start
chmod +x /root/tomcat/bin/startup.sh
# 启动Tomcat服务器
/root/tomcat/bin/startup.sh
sqlfile=/root/wafwtf.sql
if [ -f $flagfile ]; then
    mysqladmin -u root password "root"
    mysql -uroot -proot < $sqlfile
    rm -f $sqlfile
fi
# 容器保活
tail -f /root/tomcat/conf/server.xml

系列教程

全部文章RSS订阅

Docker系列

Docker 分类 RSS 订阅


Posted on
August 1, 2021
reprint policy. If reproduced, please indicate source
Support
Comments
Data Loading...
 Previous

Read More

Gitlab的安装及使用教程完全版
Gitlab的安装及使用教程完全版 Gitlab的安装及使用教程完全版
Gitlab的安装及使用教程完全版,各种细节全记录,各种问题及其解决方法记录。
2021-08-02
Next 

Read More

宝塔linux面板重启、重置等命令整合
宝塔linux面板重启、重置等命令整合 宝塔linux面板重启、重置等命令整合
VPS配置好帮手,能帮你节约大量时间。宝塔linux面板重启、重置等命令整合。命令大集合,备忘,查询,参考指南!
2021-07-31