基础命令:

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 run使用宿主机路径 docker执行宿主机命令_jar



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

docker run使用宿主机路径 docker执行宿主机命令_docker_02

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 run使用宿主机路径 docker执行宿主机命令_jar_03

下载完毕后检查下环境拥有的镜像

命令docker images

docker run使用宿主机路径 docker执行宿主机命令_docker_04



3, 启动jdk1.8的容器

命令:docker run -it --name java8 1e75b7ed169c/bin/bash

命令详解:-it交互式方式,跟它区别的是-d后台式;--name对容器进行自定义命名;1e75b7ed169c镜像的ID,也可以使用镜像的名称;/bin/bash,shell。



docker run使用宿主机路径 docker执行宿主机命令_docker_05

从截图中可以看到由于是交互方式,容器启动后直接进入到了容器内不,所以docker ps命令是不存在的。XShell打开另一个窗口,登录到宿主机上查看现在的容器状态

docker run使用宿主机路径 docker执行宿主机命令_docker run使用宿主机路径_06

Up标识容器是运行中的。

要想在宿主机中进入一个运行中的docker容器,使用命令:docker exec -it java8 /bin/bash,从docker容器中退出回到宿主机,使用命令exit

docker run使用宿主机路径 docker执行宿主机命令_docker_07

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检查下镜像是否创建成功



docker run使用宿主机路径 docker执行宿主机命令_Docker_08



6, 用自制的镜像启动一个容器

我们先把目前启动的java8这个容器关闭

命令:docker kill java8 //关闭容器

命令:docker rm java8//删掉容器

docker run使用宿主机路径 docker执行宿主机命令_docker_09

命令: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 run使用宿主机路径 docker执行宿主机命令_java_10

docker run使用宿主机路径 docker执行宿主机命令_java_11


本文演示了简单的docker操作和熟悉下几个docker的概念,但是最终演示的eureka注册中心并不能满足我们生产的要求,我们下一篇博文讲学下下docker容器自启动程序和Dockerfile的编写规则。