基础命令:
1, 启动docker环境
service docker start
2, 查看当前运行中的容器
docker ps
3, 查看当前本机的镜像
docker images
4, 查看可以下载的某镜像
docker search kafka //查看kafka的可下载镜像
5, 重启docker环境
service docker restart
演练之前我们先解释一个名词:宿主机,docker环境所在的机器这个操作系统叫做宿主机,宿主机里面run了docker的容器。
举个例子,如果你是win10操作系统,通过VMware安装了一个centos,然后在这个centos里安装了docker环境并且启动docker容器,那么这里的centos就是docker的宿主机。
Docker_Host就是宿主机.
实战演练:
我已经开发了一个Spring的eureka注册服务中心(https://github.com/yejingtao/forblog/tree/master/demo-eureka-register),我想启动2个docker容器来做eureka的高可用性部署。
1, 修改docker服务地址
直接pull国外的官网太慢了而且经常失败,所以我们需要增加一个阿里云的地址配置,跟maven增加镜像地址的原理是一样的。
这个虽然也是免费的,但是需要到阿里云官网去注册,然后给你一个
阿里云注册地址:https://dev.aliyun.com/
加速器配置导航:https://cr.console.aliyun.com/#/accelerator,里面有教材教你怎么使用加速器。
2, 下载jdk1.8的docker镜像
命令:docker search jdk1.8
Description里的OS版本不要跟宿主机的OS混淆在一起,这是指docker镜像的OS,也就是说docker容器运行时的OS,我可以宿主机是centos但是我跑一个Ubuntu的容器,这都是可以的。
如果要手动指定一个自己看得顺眼的,使用以下命令
命令:docker pull docker.io/jlwestbps/centos7.1-jdk1.8.0_73
或者直接懒人办法,直接下载最新的
命令:docker pull jdk1.8:latest
下载完毕后检查下环境拥有的镜像
命令docker images
3, 启动jdk1.8的容器
命令:docker run -it --name java8 1e75b7ed169c/bin/bash
命令详解:-it交互式方式,跟它区别的是-d后台式;--name对容器进行自定义命名;1e75b7ed169c镜像的ID,也可以使用镜像的名称;/bin/bash,shell。
从截图中可以看到由于是交互方式,容器启动后直接进入到了容器内不,所以docker ps命令是不存在的。XShell打开另一个窗口,登录到宿主机上查看现在的容器状态
Up标识容器是运行中的。
要想在宿主机中进入一个运行中的docker容器,使用命令:docker exec -it java8 /bin/bash,从docker容器中退出回到宿主机,使用命令exit
4, 上传eureka服务到容器中
不能直接向docker容器传送文件,都要先把文件上传到宿主机上,然后再通过命令让宿主机传给docker容器。
先将文件搞到centos7上
位置:/home/dockershow/Templates/eureka-register-0.0.1-SNAPSHOT.jar
宿主机切换到/home/dockershow/Templates目录下。
执行命令:docker cp eureka-register-0.0.1-SNAPSHOT.jar java8:/usr/lib
将宿主机上的jar包copy到java8这个docker容器的/usr/lib目录下。
5, 将包含eureka服务的java容器制作成一个镜像
在java8容器中切换到/usr/lib下
执行java -jar eureka-register-0.0.1-SNAPSHOT.jar--spring.active.profiles=peer1
测试下eureka能否正常启动,验证docker的jdk镜像是否正确。
验证完后关闭eureka服务,开始制作镜像。
在宿主机上执行以下命令
命令:docker commit java8 spring-register:1 //最后3个参数是容器名、镜像名、版本号
命令:docker images检查下镜像是否创建成功
6, 用自制的镜像启动一个容器
我们先把目前启动的java8这个容器关闭
命令:docker kill java8 //关闭容器
命令:docker rm java8//删掉容器
命令:docker run -p 1111:1111 -e spring.profiles.active=peer1 -it --name eureka1spring-register:1 /bin/bash
进入容器eureka1后启动eureka服务:
命令: java -jar /usr/lib/eureka-register-0.0.1-SNAPSHOT.jar
相同的方法启动另一个docker容器eureka2
docker run -p 1112:1112-e spring.profiles.active=peer2 -it --name eureka2 spring-register:1 /bin/bash
注意:如果访问不到VMware里CentOS7的eureka,需要开放下端口:
firewall-cmd --zone=public--add-port=1111/tcp --permanent
firewall-cmd--zone=public --add-port=1111/udp --permanent
firewall-cmd --zone=public--add-port=1112/tcp --permanent
firewall-cmd --zone=public--add-port=1112/udp --permanent
firewall-cmd --reload
本文演示了简单的docker操作和熟悉下几个docker的概念,但是最终演示的eureka注册中心并不能满足我们生产的要求,我们下一篇博文讲学下下docker容器自启动程序和Dockerfile的编写规则。