殇帝刘玢你 发表于 2019-2-21 06:39:22

Docker的安装和使用及dockerfile简单使用

  一、简介
Docker是一个基于go语言的开源的应用容器引擎,可以将开发者的应用及依赖包打包到一个可移植容器当中,然后发布到任何流行的Linux机器中,可以极大的减少开发人员的工作量,Docker也可以实现虚拟化
二、Docker安装
前提:
Docker自发布以来就变得非常火爆,目前Linux系统、windows系统和mac系统都支持docker,本文以Linux系统介绍Docker的安装及简单使用。
Docker的发布时间也没有多长时间,因此Linux对Docker的支持也有限制,仅支持64位,目前centos7已经支持docker,安装要求系统为64位,内核版本为3.10以上,对于centos6,安装要求需centos6.5或更高版本,同样系统为64位,docker仅支持64位,同时内核版本为2.6.32-431 或者更高版本。
可以使用uname -a 查询内核版本
http://i2.运维网.com/images/blog/201809/12/90844d30f7e154d7bee45c2a180e1bcf.png
博主的内核版本为3.10.0-862,为方便使用,安装的是centos7系统,如果是centos6还需要升级内核版本,稍显麻烦
Docker安装:
Docker有两个版本,Docker-ee和Docker-ce
Docker-ce是社区免费版,Docker-ee为企业版,需要收费,本文安装的为Docker-ce社区免费版
安装之前安装相应所需包依赖

yum -y install yum-utils device-mapper-persistent-data lvm2
http://i2.运维网.com/images/blog/201809/12/14f935a4baeffbb52ef1cfa4c21598e9.png
下载docker-ce的yum源到/etc/yum.repos.d/下

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
http://i2.运维网.com/images/blog/201809/12/1bc488fb81cd7448a149eab24d19fd1e.png
yum安装docker-ce
http://i2.运维网.com/images/blog/201809/12/e073117a9984edec3facb1465e2b54b3.png
docker安装完成,启动docker,查看docker版本信息

systemctl start docker
http://i2.运维网.com/images/blog/201809/12/f7504390c5f8e39b97fd97ca0e1bbe91.png
Docker安装成功
三、Docker使用
首先从最简单的hello-world开始
运行一个hello-world容器,本地最初没有hello-world镜像,会自动从远端docker hub拉取

docker run hello-world
http://i2.运维网.com/images/blog/201809/12/b11953d78b16fecaef5087d217cf00c8.png
使用docker images命令可查询当前本地主机上的镜像,我的机器上原来有拉取其它镜像会有点多,看到有hello-world镜像即为ok

docker images
http://i2.运维网.com/images/blog/201809/12/5a7d3d3c830c98e51f87390e91eff0a5.png
删除镜像使用以下命令

docker rmi imagename
http://i2.运维网.com/images/blog/201809/12/cdd05d3432161bcf9530626a08e03c60.png
删除成功
从远端docker hub拉取镜像

docker pull imagename
http://i2.运维网.com/images/blog/201809/12/a0f303bc629b017c5209736d4d5a3227.png
查看本地镜像列表,拉取成功
http://i2.运维网.com/images/blog/201809/12/65dcdddef1595b8deaa7deb6c687a4ea.png
拉取之前可以查询docker hub可拉取镜像列表

docker search imagename
http://i2.运维网.com/images/blog/201809/12/1b21f3c0d231de0b264af4a1015ac949.png
第一个字段为imagename(镜像名字),第四个字段为official,是否为官方镜像,个人也可以把自己制作的镜像放到docker hub上,找到自己想要下载的镜像名字就可以拉取了。
运行一个新的container

docker run [-i -t -d -p -P -c] [--name]:在容器内运行一个应用程序
-t :在新容器内指定一个伪终端或终端
-i:允许你对容器内的标准输入进行交互
-d:以进程方式运行容器,让容器在后台运行
-p:设置端口
-P:将容器内部使用的网络端口映射到我们使用的主机,就是让我们访问我们使用的主机就等同于访问到容器内部
-c:command,后面接命令
--name container name:指定容器名字
  运行一个新的container并调用打印命令

docker run ubuntu:15.10 /bin/echo "Hello world"
http://i2.运维网.com/images/blog/201809/12/5b7cd9cf92457a2d44d3d6801f6ec9de.png
运行一个交互式的container(容器)

docker run -it ubuntu:15.10 /bin/bash
http://i2.运维网.com/images/blog/201809/12/63cb57db9de2afca6d64d7b40b6b54d9.png
可以发现已经进入到容器当中,退出使用exit或ctl+d
从远程docker hub拉取一个镜像
http://i2.运维网.com/images/blog/201809/12/72603dfea9d2da52b6a86d041b1d5c00.png
在后台运行一个新的container

docker run -P --name test1 -d training/webapp python app.py
http://i2.运维网.com/images/blog/201809/12/8cfb5495a0802ef98ce3f7e012f54914.png
查看当前运行容器详情

docker ps
http://i2.运维网.com/images/blog/201809/12/527edeaaf1732358f964cd7a04b6e99e.png
查看容器端口

docker port containername
http://i2.运维网.com/images/blog/201809/12/594d0fff2a8cc6a96381e0c2f1b8721d.png
可以看到容器test1的端口映射到了本机的32768,可以访问本机ip的32768端口来查看
http://i2.运维网.com/images/blog/201809/12/5a1814ede6eb812b01e788f328240daf.png
查看容器日志

docker logs containername
http://i2.运维网.com/images/blog/201809/12/d446d10d7752091a90bbaf4479ae3527.png
停止指定容器

docker stop containername
http://i2.运维网.com/images/blog/201809/12/3f6f8a7d7f61618bb363c7bcbcc3eed5.png
再次运行该容器就可以使用

docker start containername
http://i2.运维网.com/images/blog/201809/12/aa55ba79afeb9f98b672f96695b583c1.png
查看指定容器内部运行进程

docker top containername
http://i2.运维网.com/images/blog/201809/12/6d9c5c137fce0c4b7cdd2677d7eeccc4.png
查看历史启动的容器

docker ps -a
http://i2.运维网.com/images/blog/201809/12/3677ef8ebeb0f6a2bac65d803310786e.png
删除容器,容器必须处于停止状态

docker rm containername
http://i2.运维网.com/images/blog/201809/12/9e5731764b286610a3b77085c33d2e8b.png
其它命令
为镜像添加新的标签

docker tag
  查询容器ip

docker inspect containername
  提交容器副本

docker commit [-m -a] container-id image-name
-m:提交的描述信息
-a:指定镜像作者
container-id:容器ID
image-name:你要命名的镜像名
  先写这么多,后续补充
补充:
前边有提到可以将自己的本地镜像上传到docker hub上,那么如何生成自己的镜像呢?docker提供一种docker file的方式来生成本地镜像,你也可以通过docker file的方式把你的项目打包成镜像来使用。
四、Dockerfile部分命令
首先,每个指令的前缀必须大写


FROM 指定基础镜像,后可跟镜像名字或镜像id   
例:FROM centos:6.0
MAINTAINER 作者   指定作者   
例:MAINTAINER root
ADD 把文件复制到到容器的指定目录,如果是tar包会自动解压,后可跟本地文件或url,如果是url,功能类似于wget
例:ADD nginx-1.9.3.tar.gz /usr/local
RUN 告诉docker要在镜像内执行的命令,后可跟shell命令或普通命令
例:1.RUN useradd test   2.RUN /bin/echo "hello test"
CMD 容器启动时要运行的命令      
例:1.CMD ["nginx"]2.CMD ["service mysqld start"]
RUN & CMD 区别:
RUN是构建容器时就运行的命令以及提交运行结果,即执行 docker build时运行,一个dockerfile可以有多个
CMD是容器启动时执行的命令,即执行 docker run时运行,一个dockerfile只有1个
LABEL为镜像指定标签      
例:LABEL version="1.0"
EXPOSE 将容器的监听端口暴露给外部,这样才能使主机和container建立映射,即在dokcer run使指定-p端口映射
关系
例:EXPOSE 80
ENV设置环境变量   
例:ENV PATH /usr/local/nginx/sbin:$PATH
VOLUME 可实现挂载功能,可以将内地文件夹或者其他容器中的文件夹挂在到这个容器中,容器使用的是AUFS,
这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。所以当数据需要持久化时用这个命令。
例:VOLUME /usr/local/nginx/conf/nginx.conf /etc/nginx/nginx.conf
将主机上的/usr/local/nginx/conf/nginx.conf文件挂在到容器的/etc/nginx/nginx.conf文件
copy 与add类似,区别为copy后只能跟本地目录
workdir 设置工作目录,类似于linux的cd命令
user 设置启动容器的用户    1.USER daemon2.USER UID
stopsignal当容器退出时给系统发送什么样的指令
  dockerfile命令其实有好多和linux系统本身命令的功能相似,还是相对比较好理解,为方便理解,博主做了一个关于将nginx服务打包成镜像并使用的一个例子。
首先我们需要把我们的要用到的nginx安装包和dockerfile放在同一目录下
http://i2.运维网.com/images/blog/201809/14/165ae0b91060632daf2ae70ec354776b.png
创建Dockerfile文件,其实就是把nginx的安装过程写成了脚本,只不过要符合dockerfile的规范。

FROM    centos:6.7       ---基础镜像centos6.7
MAINTAINER      test    ----dockerfile作者,test
ADD   nginx-1.6.2.tar.gz /usr/local/src----解压nginx安装包到container的/usr/local/src中
RUN   yum -y install wget gcc gcc-c++ make openssl-devel pcre-devel    ---在容器内要执行的命令,安装包依赖
RUN   useradd -s /sbin/nologin nginx    --------在容器内要执行的命令,新增nginx用户
WORKDIR /usr/local/src/nginx-1.6.2------------container内跳转目录到/usr/local/src/nginx-1.6.2
RUN   ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
--with-http_stub_status_module && make && make install   ------ 在容器内要执行的命令,源码安装nginx
RUN   echo "daemon off;">>/usr/local/nginx/conf/nginx.conf   ------在容器内要执行的命令,设置nginx前台运行
ENV   PATH /usr/local/nginx/sbin:$PATH   ---- ---设置环境变量
EXPOSE80   --------------------------------------------设置映射端口
CMD   ["nginx"]    ---------------------------------------容器启动时要执行的命令
http://i2.运维网.com/images/blog/201809/14/9ee94fbdb4080128bb55c46b2056872b.png
构建镜像操作

docker build
  执行

docker build -t nginx:1.6 .
-t      ---------指定镜像名和标签
  请注意,最后面有一个点 ‘.’,指定dockerfile的路径,也可以写为绝对路径
http://i2.运维网.com/images/blog/201809/14/23e72f811120085d08f385d7e9c431c6.png
执行成功会出现
http://i2.运维网.com/images/blog/201809/14/0f2e2f8a8a413871d015d741967e5f48.png
查看本地镜像可以看到我们构建的镜像
http://i2.运维网.com/images/blog/201809/14/48846ac8d18287e68ca5ca96fd793309.png
运行我们构建的镜像,映射到本地的80端口
http://i2.运维网.com/images/blog/201809/14/be249fdfedceefdc6179c2febfc412d3.png
查看本地端口80
http://i2.运维网.com/images/blog/201809/14/5b661f78f1e5c176816df084b21e58d8.png
访问本地80端口,成功
http://i2.运维网.com/images/blog/201809/14/fa0d76faf9caf11907a2b397b7f42062.png



页: [1]
查看完整版本: Docker的安装和使用及dockerfile简单使用