Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker是用Go语言编写的。Docker也是一个命令行工具,它提供了中央“docker”执行过程中所需的所有工具。
Docker本身需要运行在Linux系统上,因此,如果我们的系统是windows或者MacOS系统,那么我们需要下载一个DockerToolbox,这个安装程序提供了两种使用docker的工具:Kitematic (Alpha)和Docker Quickstart Terminal(前者是图形化docker后者是docker命令行)以及一个实现虚拟化的Oracle VM VirtualBox,它可以在我们第一次打开terminal的时候为我们创建一个Linux虚拟机,名字叫做default。我们也称之为“docker机器”。
image是docker镜像。docker中的重要概念。在docker镜像服务方面,有一个官方网站dockerhub,我们可以在其上找到一些别人已经做好的可执行镜像文件:centos,Ubuntu等。国内如阿里云也提供类似服务,且访问速度较快。基于image我们可以创建(沙箱环境)container,来运行我们的image。
docker常用命令
为docker镜像创建并运行一个container(容器):docker run 镜像名称(一个镜像我们可以创建运行多个容器)
在terminal搜索dockerhub上相关images,如:docker search centos
(dockerhub提供一些官方版本镜像,因此在搜索列表中,我们可以看到OFFICIAL为[OK]代表此镜像是官方提供的版本)
下载dockerhub上的云端镜像:docker pull 镜像名称
(在dockerhub上下载镜像会非常慢,我们可以使用国内如阿里云提供的镜像管理服务)
查看本地镜像:docker images
查询正在运行的容器:docker ps
查询所有容器:docker ps --all (简写是:docker ps -a)
输出镜像中的目录列表:docker run 镜像名称 ls
创建容器的时候指定名字:docker run --name 名字 镜像名称
查看最近一次创建的容器:docker ps --all --latest
查看容器的日志:docker logs 容器名称
停止运行中的容器:docker stop 容器名称
删除容器:docker rm 容器ID
重启容器:docker restart 容器名称
运行容器:docker start 容器名称
创建一个带交互的容器,比如登录到容器中:docker run --ineteractive --tty centos /bin/bash
(--interactive意思是创建一个交互容器,简写:-i ;
--tty意思是为容器创建一个终端,简写:-t ;
终端位置是:/bin/bash)
创建一个后台运行的容器,如实现centos系统镜像容器长时间执行ping操作:
docker run --detach centos ping www.baidu.com (--detach意思是此容器为后台运行容器,简写:-d)
(docker 会返回一个完整的容器id,我们可以查看正在运行的容器,以及查看容器的log来监察容器运行状态)
docker实用技巧
加速器服务配置
使用阿里云加速器提升国内获取Docker官方镜像的速度
第一步:打开阿里云加速器
登录阿里云账号,并以此查找 控制台-->云计算基础服务-->容器镜像服务-->镜像加速器,并打开对应操作系统的标签:
第二步:创建新的docker machine
在创建升级版docker machine之前需要删除我们之前默认创建的docker机器:
而后,再去创建新的docker机器:
创建一台安装有Docker环境的Linux虚拟机,指定机器名为default,同时配置Docker加速器地址。
docker-machine create --engine-registry-mirror=https://31u25vtb.mirror.aliyuncs.com -d virtualbox default
直接复制上面这行命令,粘贴到terminal中,并回车。(注意:每个阿里云用户都会有一个专属的加速地址,需要自行更换加速地址,即 https://31u25vtb.mirror.aliyuncs.com)
第三步:配置docker machine
查看机器的环境配置,并配置到本地,并通过docker 客户端访问Docker服务。
docker-machine env default
eval "$(docker-machine env default)"
docker info
逐条复制,并在terminal中执行。
综上三步,已经设置好了阿里云加速服务,这次再通过pull命令下载官方镜像,就会快许多。
Dockerfile创建自定义image镜像
我们可以通过Dockerfile文件来将程序jar包制作成docker image文件,上传到阿里云或者在本地运行。
第一步:创建一个用于生成images的文件夹,将Dockerfile文件至于其中
文件夹参考目录结构如下图所示:
其中,start.sh脚本文件如下:
#!/bin/bash
nohup java -jar -Dserver.port=8888 app.jar >./log.out 2>&1 &
tail -f /dev/null
Dockerfile文件如下:
FROM centosMAINTAINER yan.li@ahav.com.cn
ENV APPHOME /apphome
RUN mkdir $APPHOME
WORKDIR $APPHOME
COPY jdk8 $APPHOME/jdk8
ADD app.jar $APPHOME/app.jar
ADD start.sh $APPHOME/
ENV JAVA_HOME=$APPHOME/jdk8/jre
ENV CLASSPATH=.:$JAVA_HOME/lib \PATH=$JAVA_HOME/bin:$PATH
EXPOSE 8888
RUN chmod 777 -R $APPHOME
CMD /bin/bash -c $APPHOME/start.sh
第二步:使用Docker命令行工具生成docker镜像
docker build -t secosecurity:0.1.2 .
注意:最后面有一个点,secosecurity为生成的镜像名称
通过docker images指令可以查看新生成的名叫“secosecurity”的images镜像。
Docker命令行push镜像到阿里云
首先,网页登陆阿里云
在已经创建好的registry中找到push信息:
在docker命令行中依次执行红框内三条语句即可。