一、Docker简述
ocker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
二、Linux下安装Docker
更新yum
$ yum -y update
安装Docker
$ yum install docker -y
Docker生命周期常用命令
$ systemctl start docker.service
$ systemctl stop docker.service
$ systemctl restart docker.service
$ systemctl status docker.service
运行hello-world镜像验证是否正确安装Docker
docker run hello-world
三、Docker容器的使用
我们可以使用docker命令来查看Docker客户端的所有命令选项。
$ docker
我们可以使用docker command --help更深入的了解指定的Docker命令使用方法
$ docker stats --help
获取镜像
$ docker search tomcat
starts最多的一般就是官方所提供的镜像了。
启动容器
镜像一般有很多版本,我们可以打开 hub.docker.com,然后搜索tomcat,然后点击tag。
如果需要使用某个版本则可以使用
docker run -it --rm -p 8888:8080 tomcat:8.0
参数说明:
-i: 交互式操作。
-t: 终端。
rm:表示如果容器已经存在,自动删除容器
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
8888:8080:服务器的8888端口映射到docker内的8080端口
要退出终端直接输入:exit
查看容器
$ docker ps -a //docker内所有的镜像
$ docker ps //docker内正在运行的镜像
$ docker start //启动一个停止的容器
后台运行
在大部分情况下,docker服务会是在后台运行的,我们可以用**-d**指定容器的运行模式
$ docker run -itd --name tomcat -test ubuntu /bin/bash
查看本地镜像
$ docker images
删除镜像
$ docker rmi docker.io/hello-world
因为有对应容器的存在,所以会发现删不掉该镜像。
tag标识
$ docker tag docker.io/tomcat:latest docker.io/mytomcat:latest
这样 image_id= "1b6b1fe7261e" 的镜像,就有两个标记了,分别是
docker.io/tomcat:latest
docker.io/mytomcat:latest
删除全部镜像
$ docker rmi $(docker images -q)
四、容器管理
指令流程
- 运行 run
- 进入 exec attach
- 生命周期管理, 暂停,恢复,停止,启动 pause, unpause, stop, start
- ps 查看所有的容器
- 检查某个具体的容器
- rm 删除容器
- commit,对容器做了修改后,把改动后的容器,再次转换为镜像
run
$ docker run -dit --privileged -p9200:9200 -p9300:9300 -p30000-30010:30000-30010 --name es elasticsearch:latest /usr/sbin/init
docker run 表示运行一个镜像
-dit 是 -d -i -t 的缩写。 -d ,表示 detach,即在后台运行。 -i 表示提供交互接口,这样才可以通过 docker 和 跑起来的操作系统交互。 -t 表示提供一个 tty (伪终端),与 -i 配合就可以通过 ssh 工具连接到 这个容器里面去了
--privileged 启动容器的时候,把权限带进去。 这样才可以在容器里进行完整的操作
-p9200:9200 第一个9200 ,表示在CentOS 上开放9200 端口。 第二个9200
表示在容器里开放9200 端口。 这样当访问CentOS 的9200 端口的时候,就会间接地访问到容器里了
http://ajar96.cn:9200, 这个 ajar96.cn 是CentOS 的ip地址,9200是 CentOS 的端口,但是通过-p9200:9200 这么一映射,就访问到容器里的9200端口上的 tomcat了
--name es 给容器取了个名字,叫做 es,方便后续管理
elasticsearch:latest elasticsearch就是镜像的名称, latest是版本号,即最新版本
/usr/sbin/init: 表示启动后运行的程序,即通过这个命令做初始化
exec
$ docker -it exec container_Name /bin/bash //进入该容器
commit
该命令就是把一个活生生的容器,再转换为镜像
$ docker commit es es:now
生命周期管理
$ docker pause es //暂停
$ docker unpause es //恢复
$ docker start es //启动
$ docker stop es //停止
inspect
用于检查容器内的各项信息
$ docker inspect es
rm
删除容器
$ docker rm es
正在运行的容器是不能被删除的,需要先stop掉。
当删除了容器以后,就可以使用rmi来删除对应镜像了。
删除所有容器
$ docker rm `docker ps -a -q` -f
Docker常见问题
重启服务器后,控制台显示
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ service docker restart