2017-10-18增加以前看过的一个网址:http://blog.sae.sina.com.cn/archives/2896
个人理解:
docker是一个让容器运行的环境,容器是一个个小的可移植的操作系统。我们以前的部署是在服务器上安装tomcat,用tomcat映射项目,但是我们如果想部署在另一台服务器上,就要把环境重新搭建一遍。使用docker后无需搭建系统,只需要复制镜像到另一台服务器,启动容器就可以了。以前部署时,tomcat停止再启动中间会有一段时间网页登录不了。使用docker后,我们可以先启动dockerB,启动好之后默默的替换dockerA,客户就不会感觉到系统在升级。(实现这个功能好像需要用到kubernetes,我还没有研究。)
一、安装docker
1、需求
Docker runs on CentOS 7.X.
Docker requires a 64-bit OS and version 3.10 or higher of the Linux kernel.
docker需安装在centos7以上版本的操作系统中。
docker需要64位操作系统和3.10或更高版本的Linux内核
2、禁用centos7的Firewalls 安装iptables(个人习惯)
参考:http://www.52codes.net/article/959.html
下面步骤摘自:http://www.centoscn.com/CentOS/config/2015/0620/5698.html
首先要停止 firewall 服务,输入下面的命令:
systemctl stop firewalld.service
然后要禁止 firewall 服务在系统启动的时候自动启动, 输入下面的命令:
systemctl disable firewalld.server
安装iptables 包,使用下面的命令:
yum install iptables-services
设置iptables 防火墙服务开机自动启动,输入下面的命令:
systemctl enable iptables
如果你想使用/etc/init.d/iptables save 命令来保存已经更改的防火墙策略,那么需要输入下面的命令,将iptables.init 脚本用刚才安装iptables 启动脚本覆盖,输入下面的命令:
/usr/libexec/iptables/iptables.init /etc/init.d/iptables
3、安装docker
查看系统版本: cat /etc/redhat-release
查看你当前的内核版本 uname –r
如果内核版本不是3.0以上 可以使用如下升级内核教程:
http://blog.csdn.net/taiyang1987912/article/details/42744019
docker安装参考:https://docs.docker.com/engine/installation/linux/centos/
以下步骤摘自按照这个教程操作:http://www.linuxidc.com/Linux/2014-12/110034.htm
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:
[root@localhost ~]# yum install docker
启动 Docker 服务
安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:
- [root@localhost ~]# service docker start
- [root@localhost ~]# chkconfig docker on
(LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:
- [root@localhost ~]# systemctl start docker.service
- [root@localhost ~]# systemctl enable docker.service
)
二、下载镜像
docker相关命令参考(文章末尾):http://h2appy.blog.51cto.com/609721/1670017
可以查看仓库中的镜像:docker search centos
INDEX 仓库名
name 镜像名称
description 此镜像的描述信息
starts 被下载次数
下载镜像(以centos为例) docker pull [name]
查看现在存在的镜像 :docker images
三、创建镜像
两种方法:
方法一:命令行先创建一个容器再提交成镜像
docker run -it --name 'test' -v /opt/soft:/opt/soft 6759 /bin/bash
-v 把一个宿主机上的目录挂载到镜像里。冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。挂在后镜像内就可以共享宿主机里的文件了。
(挂载目录可以参考:https://my.oschina.net/piorcn/blog/324202)
--name 指定创建容器的名字
6759是镜像的ID 只输入前四位即可
进入这个容器,cd到/opt/soft这个目录下可以看到宿主机中的该目录下的文件。我们把安装包放在此目录下,容器中就可以安装了。
安装jdk、tomcat,可以将war包放在webapp下,也可以在tomcat的server.xml中映射解压后的war包。
安装好后输入 exit 即可退出。
docker ps –a 可以查看所有的容器
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
[OPTIONS]:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
[REPOSITORY[:TAG]]
REPOSITORY提交至哪一个仓库
TAG 相当于这个镜像的名称
提交镜像参考:http://blog.csdn.net/qq_28602957/article/details/53727993
方法二、dockerfile
Dockerfile是docker的编排文件,我们可以在Dockerfile文件中定义对容器编排的相关步骤
http://blog.csdn.net/rznice/article/details/52211620
eg:创建一个文件夹docker ,在文件夹中创建一个文件dockerfile
我已经事先创建了安装了jdk、tomcat的镜像,并且tomcat的映射项目路径也已经改好,所以From的镜像就是该CAM镜像。
FROM basic:cam
COPY /cam /opt/www/cam(复制与dockerfile在同一个文件夹下的项目至容器中的目录下)
ENV JAVA_HOME /usr/java/jdk1.8.0_91
ENV PATH $JAVA_HOME/bin:$PATH
ENTRYPOINT /opt/soft/apache-tomcat-8.0.28/bin/startup.sh && tail -F /opt/soft/apache-tomcat-8.0.28/logs/catalina.out(设置tomcat启动)
EXPOSE 8081(暴露容器的8081端口)
保存后建立镜像:
docker build -t container:cam -f /opt/docker/Dockerfile /opt
或者docker build -t container:cam .(不要忘记.)
(通过-f来指定Dockerfile文件的位置,后面的/soft及其目录下必须能够找到Dockerfile文件否则就会报上下文环境的错误。
四、提交镜像
如果要上传到私有仓库 首先需要登录到该仓库 使用 docker login 仓库地址 (或直接 docker login -u 用户名 -p 密码 仓库地址)
上传步骤
1. 首先将要上传的镜像打tag
比如原镜像叫 repository/test1 上传仓库后叫tes2
docker tag repository/test1 仓库地址/test2
2.上传
因为已经登陆了仓库 所以直接push
docker push 仓库地址/test2
五、创建容器
docker run -d -p 8081:8081 --name cam container:cam
-p 建立宿主机与容器的端口映射
--name 给容器起个别名
如果是按照上述dockerfile创建的容器 直接run一个容器后tomcat就自启动了
否则需要命令行进入容器
推荐使用 docker exec –it [ID] /bin/bash 进入容器
使用 docker attach进入容器有时会卡死或者退出时ports也断了。
docker start 开启一个停止的容器
docker stop 停止一个运行的容器。
docker ps 可以查看端口映射中的容器
六、集成Jenkins
Jenkins上是有docker这个插件的 但是我还没有研究 现在是使用命令行运行容器
思路就是:
关闭运行中的容器
删除容器
删除镜像
dockerfile创建镜像(这样更新后的项目文件夹就copy到镜像中了)
创建容器
摘自:http://h2appy.blog.51cto.com/609721/1670017
docker命令的使用
查看容器挂载目录
$ docker inspect container_name | grep Mounts -A 20
1、直接输入docker命令来查看所有的Options和Commands。
查看某一个command的详细使用方法:docker COMMAND --help
2、搜索可用的docker镜像:docker search NAME
3、下载镜像:docker pull NAME[:TAG]
比如获取最新的centos镜像:docker pull centos:latest
注意:这里要写用docker search搜索到的完整的镜像名。
4、查看安装的镜像:docker images [NAME]
5、在docker容器中运行命令:docker run IMAGE [COMMAND] [ARG...]
docker run命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。
注意:IMAGE=REPOSITORY[:TAG],如果IMAGE参数不指定镜像的TAG,默认TAG为latest。
在刚刚下载的镜像中输出"hello word":docker run centos echo 'hello world!'
6、列出容器:docker ps -a
查看最近生成的容器:docker ps -l
查看正在运行的容器:docker ps
7、显示容器的标准输出:docker logs CONTAINERID
无需拷贝完整的id,一般写最开始的三至四个字符即可。
8、在容器中安装新程序,比如安装ifconfig命令(centos7默认没有ifconfig):docker run centos yum install net-tools -y
如果yum不指定-y参数的话,yum命令会进入交互模式,需要用户输入命令来进行确认,在docker环境中是无法响应这种交互的。但使用docker run的-i -t参数就会响应这种交互,用户可以输入命令了,比如:docker run -i -t centos yum install net-tools
9、保存对容器的修改并生成新的镜像:docker commit CONTAINERID [REPOSITORY[:TAG]]
REPOSITORY参数可以是新的镜像名字,也可以是旧的镜像名;如果和旧的镜像名和TAG都相同,会覆盖掉旧的镜像。
10、停止正在运行的容器:docker stop CONTAINERID
默认等待10秒钟再杀死指定容器。可以使用-t参数来设置等待时间。
11、查看容器或镜像的详细信息:docker inspect CONTAINERID|IMAGE
参数可以是容器的ID或者是镜像名(NAME:TAG)。
12、删除容器:docker rm CONTAINERID
查看所有容器ID:docker ps -a -q
删除所有的容器:docker rm $(docker ps -a -q)
13、删除镜像:docker rmi IMAGE
14.查看docker的信息,包括Containers和Images数目、kernel版本等。
创建容器并登入的操作
1、创建一个新容器并登入:docker run -i -t IMAGE /bin/bash
使用image创建container并进入交互模式,login shell是/bin/bash,现在可以自由的对容器进行操作了。最后使用exit退出容器。
注意:如果IMAGE参数不指定TAG,默认TAG为latest。
2、启动一个退出的容器:docker start CONTAINERID
3、attach到运行中的容器:docker attach CONTAINERID