Docker新手教程

简单的Docker入门教程

Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最 初发起者是dotCloud公司。Docker自开 源后受到广泛的关注和讨论,目 前已有多个相关项目(包括Docker三剑客、Kubernetes等),逐渐形成 了围绕Docker容器的生态体系。
Docker项目已加入了Linux基金会,并遵循Apache2.0协议,全部开
源代码均在https://github.com/docker/docker上进行维护。在Linux基金会 最近一次关于“最受欢迎的云计算开源项目”的调查中,Docker仅次于 2010年发起的OpenStack项目,并仍处于上升趋势。
Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging)、分发 (Distribution)、部署(Deployment)、运行(Runtime)生命周期进 行管理,达到应用组件“一次封装,到处运行”的目的。这里的应用组 件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台
服务,甚至是一个操作系统或集群。

尝试搭建简单的Docker镜像

Apache是一个高稳定性的、商业级别的开源Web服务器。目前 Apache已经是世界使用排名第一的Web服务器软件。由于其良好的跨平 台和安全性,Apache被广泛应用在多种平台和操作系统上。作为Apache 软件基金会支持的项目,它的开发者社区完善而高效。自1995年发布至 今,一直以高标准进行维护与开发。Apache名称源自美国的西南部一个 印第安人部落:阿帕奇族,它支持类UNIX和Windows系统。

1.使用官方镜像
官方提供了名为httpd的Apache镜像,可以作为基础Web服务镜像。
编写Dockerfile文件,内容如下:

FROM httpd:2.4 COPY ./public-html /usr/local/apache2/htdocs/

创建项目目录public-html,并在此目录下创建index.html文件:

                      

Hello, Docker!

构建自定义镜像:

$ docker build -t apache2-image .

注意 . 表示读取当前目录下
构建完成后,使用docker run指令运行镜像

$ docker run -it --rm --name apache-container -p 80:80 apache2-image

通过本地的80端口即可访问静态页面。
也可以不创建自定义镜像,直接通过映射目录方式运行Apache容器:

$ docker run -it --rm --name my-apache-app -p 80:80 -v "$PWD":/usr/local/    apache2/htdocs/ httpd:2.4
  1. 使用自定义镜像
    首先,创建一个apache_ubuntu工作目录,在其中创建Dockerfile文 件、run.sh文件和sample目录:
$ mkdir apache_ubuntu && cd apache_ubuntu 
$ touch Dockerfile run.sh 
$ mkdir sample

Dockerfile的内容和各个部分的说明:

FROM sshd:Dockerfile
 #设置继承自用户创建的sshd镜像 
 MAINTAINER docker_user ([email protected])
#创建者的基本信息 #设置环境变量,所有操作都是非交互式的 
ENV DEBIAN_FRONTEND noninteractive 
#安装 RUN apt-get -yq install apache2&&\    rm -rf /var/lib/apt/lists/* RUN echo "Asia/Shanghai" > /etc/timezone && \        dpkg-reconfigure -f noninteractive tzdata 
#注意这里要更改系统的时区设置,因为在web应用中经常会用到时区这个系统变量,默认的ubuntu  ?会让你的应用程序发生不可思议的效果哦 #添加用户的脚本,并设置权限,这会覆盖之前放在这个位置的脚本
ADD run.sh /run.sh RUN chmod 755 /*.sh 
#添加一个示例的web站点,删掉默认安装在apache文件夹下面的文件,并将用户添加的示例用软链接 ?链到/var/www/html目录下面
RUN mkdir -p /var/lock/apache2 &&mkdir -p /app && rm -fr /var/www/html && ln -s     /app /var/www/html COPY sample/ /app 
 #设置apache相关的一些变量,在容器启动的时候可以使用-e参数替代 
ENV APACHE_RUN_USER www-data 
ENV APACHE_RUN_GROUP www-data 
ENV APACHE_LOG_DIR /var/log/apache2 
ENV APACHE_PID_FILE /var/run/apache2.pid 
ENV APACHE_RUN_DIR /var/run/apache2 
ENV APACHE_LOCK_DIR /var/lock/apache2 
ENV APACHE_SERVERADMIN admin@localhost
ENV APACHE_SERVERNAME localhost 
ENV APACHE_SERVERALIAS docker.localhost 
ENV APACHE_DOCUMENTROOT /var/www 
EXPOSE 80 
WORKDIR /app 
CMD ["/run.sh"]

此sample站点的内容为输出Hello Docker!。然后在sample目录下创 建index.html文件,内容如下

                        

Hello, Docker!

run.sh脚本内容也很简单,只是启动apache服务

$ cat run.sh #!/bin/bash exec apache2 -D FOREGROUND

此时,apache_ubuntu目录下面的文件结构为:

$ tree . . |-- Dockerfile |-- run.sh `-- sample    `-- index.html 1 directory, 3 files

创建镜像

$ docker build -t apache:ubuntu .

下面开始使用docker run指令测试镜像。可以使用-P参数映射需要开 放的端口(22和80端口):

$ docker run -d -P apache:ubuntu 64681e2ae943f18eae9f599dbc43b5f44d9090bdca3d8af641d7b371c124acfd 
$ docker ps -a 
CONTAINER ID        IMAGE            COMMAND          CREATED          STATUS                PORTS          NAMES 
64681e2ae943        apache:ubuntu       "/run.sh"           2 seconds ago           Up 1 seconds             0.0.0.0:49171->22/tcp, 
0.0.0.0:49172->80/tcp       naughty_poincare 890c04ff8d76        sshd:Dockerfile     "/run.sh"           9 hours ago          Exited (0) 
3 hours ago   0.0.0.0:101->22/tcp   high_albattani 3ad7182aa47f        sshd:ubuntu         "/run.sh"           21 hours ago            
Exited (0) 3 hours ago   0.0.0.0:100->22/tcp   focused_ptolemy

$ curl 127.0.0.1:49172 Hello Docker!

如果想要映射本地目录

$ docker run -i -d -p 80:80 -p 103:22 -e APACHE_SERVERNAME=test  -v `pwd`/www:/    var/www:ro apache:ubuntu

ngin镜像

  1. Dockerfile内容如下:
FROM nginx COPY ./index.html /usr/share/nginx/html
  1. 开始构建镜像my-nginx:
$ docker build -t my-nginx .
  1. 构建成功后执行docker run指令:
$ docker run --name nginx-container -d my-nginx

Tomcat镜像

1.Dockerfile文件

FROM sshd:Dockerfile 
#设置继承自用户创建的sshd镜像
MAINTAINER docker_user ([email protected])
 #下面是一些创建者的基本信息
  #设置环境变量,所有操作都是非交互式的 
  ENV DEBIAN_FRONTEND noninteractive 
  #注意这里要更改系统的时区设置 
  RUN echo "Asia/Shanghai" > /etc/timezone && \        dpkg-reconfigure -f noninteractive tzdata 
  #安装跟tomcat用户认证相关的软件 
  RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \    apt-get clean && \    rm -rf /var/lib/apt/lists/* 
  #设置tomcat的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。 
  ENV CATALINA_HOME /tomcat 
  ENV JAVA_HOME /jdk 
  #复制tomcat和jdk文件到镜像中
   ADD apache-tomcat-7.0.56 /tomcat 
   ADD jdk /jdk 
   ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh 
   ADD run.sh /run.sh 
   RUN chmod +x /*.sh 
   RUN chmod +x /tomcat/bin/*.sh 
   EXPOSE 8080 CMD ["/run.sh"]

创建tomcat用户和密码脚本文件create_tomcat_admin_user.sh文件,
内容为:

#!/bin/bash 
if [ -f /.tomcat_admin_created ]; then    echo "Tomcat 'admin' user already created"    exit 0 fi 
#generate password
 PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)} _word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" ) 
 echo "=> Creating and admin user with a ${_word} password in Tomcat" 
 sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml
  echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo "" >> ${CATALINA_HOME}/conf/    tomcat-users.xml echo '' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
  echo "=> Done!" touch /.tomcat_admin_created echo "========================================================================" 
 echo "You can now configure to this Tomcat server using:"
 echo ""
 echo "    admin:${PASS}"
 echo "" 
 echo "========================================================================"

编写run.sh脚本文件,内容为:

#!/bin/bash 
if [ ! -f /.tomcat_admin_created ]; 
	then    /create_tomcat_admin_user.sh 
fi
 /usr/sbin/sshd -D &
  exec ${CATALINA_HOME}/bin/catalina.sh run

  1. 创建和测试镜像
$ docker build -t tomcat7.0:jdk1.6 .
$ docker run -d -P tomcat7.0:jdk1.6 3cd4238cb32a713a3a1c29d93fbfc80cba150653b5eb8bd7629bee957e7378ed

通过docker logs得到tomcat的密码aBwN0CNCPckw:

$ docker logs 3cd 
=> Creating and admin user with a random password in Tomcat => Done! ======================================================================== 
You can now configure to this 
Tomcat server using:    admin:aBwN0CNCPckw

查看映射的端口信息:

$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED                 STATUS              PORTS     NAMES 
3cd4238cb32a        tomcat7.0:jdk1.6    "/run.sh"           4 seconds ago           Up 3 seconds        0.0.0.0:49157->22/tcp, 0.0.0.0:49158->8080/tcp       cranky_wright

在本地使用浏览器登录Tomcat管理界面,访问本地的49158端口, 即http://127.0.0.1:49158,如图11-3所示。
Docker新手教程_第1张图片

你可能感兴趣的:(linux)