目录

一、注册docker hub账号

二、从docker hub远程仓库拉镜像

三、常用命令演示

3.1 查看容器

3.2 运行容器

3.3 验证容器

3.4 进入容器

3.5 文件拷贝

   3.5.1 容器目录/文件拷贝☞宿主机上

   3.5.2 宿主机上☞容器目录/文件拷贝

四、拉取Tomcat镜像

4.1 搜索TC镜像

4.2 拉取

4.2 运行Tomcat容器

4.3 验证容器

4.3.1 端口验证

4.3.2 浏览器验证

4.4 进入容器

4.5 文件拷贝

五、“改造”Tomcat镜像

5.1 安装vim、net-tools工具

5.2 将React写的简单前端项目,放到webapps下

5.3 cp前端包,到webapps下

六、推送Tomcat镜像到Docker Hub

6.1 从容器创建新的镜像

6.2 登录Docker Hub

6.3 推送image到hub仓库

6.4 Docker Hub查看推送的镜像

七、推送Tomcat镜像到阿里云镜像服务器

7.1 注册阿里云账号

7.1.1 创建命名空间

7.1.2 创建docker客户端访问凭证

7.1.3 客户端登录阿里云容器服务中心

7.1.4 看下官方是如何教我们推自己的镜像包上去的

7.1.5 Tomcat镜像打标签,生成新的镜像

7.1.6 立刻,马上给我推上去

7.1.7 查看镜像

7.1.8 镜像拉取地址

八、拉取远程镜像

8.1 清空本地所有的容器和镜像

8.1.1 删除容器后,查看当前所有的容器

8.1.2 删除镜像后,查看当前所有的镜像

8.1.3 拉取阿里云Tomcat镜像

8.1.4 拉取DockerHub镜像


 

一、注册docker hub账号

Docker Hub官网地址 : https://hub.docker.com/

例如,我的docker hub账号为:appleyk

里面已经有了一个推上去的镜像,主要是对官方nginx镜像做了小小的修改,后续会放出如何本地拉远程仓库上的tomcat 镜像、如何在本地“调整”tomcat镜像后,分别推送至hub和阿里云镜像仓库上。

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲


注意这个镜像是pulic的,意味着任何人都可以pull到本地仓库,pull的方式如下:

docker pull appleyk/nginx:1.0.0-dev

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_02

 


二、从docker hub远程仓库拉镜像

 

下面演示一下拉取的过程

首先,先来看下docker的desktop版,带图形界面的,很方便,

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_03


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_04


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_05


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_06


  然后我们本地终端先登录下,然后再拉取

docker login

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_07


查看下本地仓库对应的镜像有哪些

docker images

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_08


其中镜像ID是:93831fba37e4所属的仓库是阿里云的

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_09


来,我们开始pull官网hub中我们公有的镜像

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_10


因为本地已经有了这个签名的镜像文件,所以实际拉取的时候,

会对比,如果本地有的话,是不需要二次download的


 

三、常用命令演示

 

3.1 查看容器

 

二话不说,先来熟悉一波命令

查看当前正在运行的容器(一定要搞清楚仓库、镜像、容器三者之间的关系!!!)

docker ps

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_11


要查看所有的容器,后面加-a参数

docker ps -a

3.2 运行容器

这里建议使用后台运行容器,当然你也可不指定端口映射,让docker帮你默认映射,或者不指定-d参数非后台运行

docker run --name nginx -p 80:80 -d appleyk/nginx:1.0.0-dev

   或

docker run --name nginx -p 80:80 -d 93

  或

docker run --name nginx -p 80:80 -d 93831fba37e4

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_12


可以看出来,系统中已经有一个容器名称叫做/nginx 的目录存在了,所以冲突了,为了不影响新nginx 容器的启动,把旧的原来的目录删了

(注意:像镜像和容器操作的,最简单快捷的方式,就是拿它们各自的id,id有时候不用写全,记住前几个不重复的就行,因为敲abc总比敲名字来的快啊,还不容易出错,当然,你说你复制那就算了,当我没说)

docker rm -f 27

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_13


3.3 验证容器

再次ps查看运行中的容器,你会发现,多了一个刚才启动的家伙

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_14


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_15


3.4 进入容器

进入nginx容器

docker exec -it nginx bash

root@bfbf848c9695:/# cd /usr/share/nginx/html/
root@bfbf848c9695:/usr/share/nginx/html# ls -l

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_16

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_17

 


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_18


保存后退出,浏览器看效果

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_19


        当然,这种进入容器里修改静态html的方式太麻烦,不能每次修改都要进一次吧,怎么办,好办,我们把nginx容器中的目录或文件挂载出来,挂载到我们的宿主机上,下面再来演示另外一种启动方式。不过首先我们要做好准备,将原有容器中的相关配置文件给拷贝出来,为什么要拷贝,因为宿主机上没有啊,要做挂载啊,为什么要做挂载啊?一是因为要持久化啊,万一容器不小心被删了,里面的东西可就没了,二是为了建立宿主机和容器之间的数据共享,这样一来增删改数据就方便了。

 


3.5 文件拷贝

 

3.5.1 容器目录/文件拷贝☞宿主机上

sudo docker cp 5d:/etc/nginx /Users/docker-nginx

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_20

 

(1) 宿主机查看

ls -l /Users/docker-nginx/

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_21


(2)宿主机修改1.txt文件内容

sudo vim /Users/docker-nginx/1.txt

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_22


(3) 进入容器,查看

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_23

发现内容并未改变,为什么,很简单,只是拷贝了数据,并没有建立“数据共享”,也就是宿主机的目录没有挂载到容器中


(4)挂载数据,重新起一个容器

注意,如果使用相同的nginx容器名,请把之前的同名容器删除后,在重新run,挂载的方式很简单,就是加个-v参数,后面跟宿主机目录:容器目录,既把宿主机上的哪一个目录和容器中的哪个目录对应起来,这样,在宿主机上对目录中的文件数据进行操作后,在容器中就可以实时看到更新后的内容了,

docker run --name nginx -p 80:80 -v /Users/docker-nginx/:/etc/nginx/ -d appleyk/nginx:1.0.0-dev

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_24


反过来,在容器里面改效果也是一样的

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_25

提示没有权限,在宿主机上,我们需要对挂载的目录赋予读写(可执行,可给可不给)权限


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_26

没有给目录赋权限之前


 


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_27

给目录赋予最高权限后(r--读,w--写,x--执行,分别对应的数值为4,2,1。)

 


再次在容器中对1.txt进行内容追加

cat >> 1.txt << EOF

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_28


3.5.2 宿主机上☞容器目录/文件拷贝

和3.5.1命令是反过来的,比如,我们在宿主机上非挂载的目录下创建一个love.html的文件,写入内容如下:

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_29

我们的目的是,要把这个love.html文件放到nginx容器中的/usr/share/nginx/html目录下

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_30


命令搞一波

docker cp /Users/html/love.html d6:/usr/share/nginx/html/love.html

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_31


浏览器,看下效果

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_32

至此,基本简单的docker命令就演示完了,下面走一遍,拉tomcat镜像,然后修改镜像,最后分别推送到docker hub和阿里云自己的仓库中的过程。


 

四、拉取Tomcat镜像

 

4.1 搜索TC镜像

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_33


4.2 拉取

docker pull tomcat

可以看到,下载的过程,其实就基于镜像中的分层一层层去下载的,每一个镜像层都有一个唯一标识,N多个镜像层构成一个完整的docker镜像

我们来看下,官方tomcat镜像的元数据都有哪些有“价值”的信息

docker inspect tomcat

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_34


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_35


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_36


4.2 运行Tomcat容器

  非后台运行(不带-d参数),启动的时候,会打印容器运行的日志信息

docker run --name tomcat -p 8081:8080 625

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_37

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_38

由于宿主机8080端口被占用了,故上面启动tomcat容器的时候,宿主机映射的端口改为了8081

lsof -i :8080

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_39


4.3 验证容器

4.3.1 端口验证

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_40

4.3.2 浏览器验证

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_41

  纳尼,找不到资源,不应该是让人兴奋的Tomcat经典主页页面吗,哪去了?比如下面的


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_42


4.4 进入容器

出现上述问题,如果端口正常,那一定就是webapps目录下面没有应用资源,进入容器看下

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_43


看到那个dist目录没,进去探下

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_44

不看不知道,一看才知道,这个tc镜像居然是这么玩的,孤陋寡闻了,好吧,那我就不客气了,全部带走,cp到webapps目录下


4.5 文件拷贝

cp -r webapps.dist/* webapps/

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_45


4.6 再刷一次浏览器

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_46

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_47

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_48

 

至此,拉取tomcat镜像,运行tomcat容器讲完了,下面来说下,如何改造一个tomcat镜像


 

五、“改造”Tomcat镜像

5.1 安装vim、net-tools工具

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_49


先更新apt-get

apt-get update

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_50

整个下载过程还是很费时的,所以,搞好一个镜像后,提交到自己的仓库,下次不管在哪,拉下来就可以省很多时间,正所谓一次构建,处处使用!


然后分别安装vim和net-tools工具

apt-get install net-tools

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_51

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_52


apt-get install vim

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_53

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_54


5.2 将React写的简单项目,放到webapps下

先看下宿主机上跑的效果


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_55


5.3 cp前端包,到webapps下

没有忘记命令吧,注意是把宿主机上的文件cp到容器中噢

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_56


docker cp build/ 8f:/usr/local/tomcat/webapps/login

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_57

 

这里补充一个坑点,react打包部署到tomcat中时,需要注意以下3点:

(1)增加"homepage":"."

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_58


(2)node_modules中找到react-script模块,改一个地方如下:

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_59


(3)使用HashRouter,而不是BrowerRouter

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_60


看下效果

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_61


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_62

 

其他不在演示,最后把react整个项目的源码cp到tomcat目录下

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_63


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_64


六、推送Tomcat镜像到Docker Hub

6.1 从容器创建新的镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

上面我们对tomcat原始镜像启动的容器做了一些调整,一个是将webapps.dist目录下面的内容搬到了webapps目录下,一个是将react的源码和前端包从宿主机上分别拷贝到了tomcat根目录和子目录webapps下,还有一个就是更新了apt-get,并安装了net-tools和vim工具

接下来,利用上述的命令,我们基于改动的容器重新在本地提交一个新的镜像出来,注意命令中的repository是你docker hub上创建的用户名

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_65

这种方式和提交git项目是一样的,先commit到本地,在push到远程仓库


本地查看刚刚提交的镜像

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_66


6.2 登录Docker Hub

登录下hub

docker login

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_67

由于已经登录过了,上面只是又做了一次验证


6.3 推送image到hub仓库

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_68


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_69


6.4 Docker Hub查看推送的镜像

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_70


下载的话,很简单,直接pull就行(最后会将本地的镜像全部删除,走一个pull流程)

docker pull appleyk/tomcat:9

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_71


 

七、推送Tomcat镜像到阿里云镜像服务器

7.1 注册阿里云账号

此过程略

注册完之后,登录进去,干两件事情


7.1.1 创建命名空间

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_72


7.1.2 创建docker客户端访问凭证

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_73


7.1.3 客户端登录阿里云容器服务中心

sudo docker login --username=appleyk105223 registry.cn-shanghai.aliyuncs.com

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_74


7.1.4 看下官方是如何教我们推自己的镜像包上去的

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_75

$ sudo docker login --username=appleyk105223 registry.cn-shanghai.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/appleyk_test/nginx:[镜像版本号]
$ sudo docker push registry.cn-shanghai.aliyuncs.com/appleyk_test/nginx:[镜像版本号]

7.1.5 Tomcat镜像打标签,生成新的镜像

sudo docker tag 54 registry.cn-shanghai.aliyuncs.com/appleyk_test/tomcat:9

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_76


7.1.6 立刻,马上给我推上去

sudo docker push registry.cn-shanghai.aliyuncs.com/appleyk_test/tomcat:9

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_77


7.1.7 查看镜像

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_推到镜像仓库的镜像怎么删除_78


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_79


7.1.8 镜像拉取地址

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_80

公网地址:registry.cn-shanghai.aliyuncs.com/appleyk_test/tomcat

专有网络:registry-vpc.cn-shanghai.aliyuncs.com/appleyk_test/tomcat

经典网络:registry-internal.cn-shanghai.aliyuncs.com/appleyk_test/tomcat

到这里,基本上算是要要要结束本篇博文了,最后的最后,我要停掉本地所有运行中的容器、清空本地仓库中所有的容器相关数据,也包括镜像,然后重新从阿里云和Hub中心进行拉取,带大家再重新感受一下,拥有自己的docker镜像仓库是多么一件让人嗨皮的一件事情,就像拥有自己的代码仓库和maven仓库一样,总之,有了docker仓库后,一切都方便简单多了!


 

 

八、拉取远程镜像

 

8.1 清空本地所有的容器和镜像

 

8.1.1 删除容器后,查看当前所有的容器

docker rm -f 容器ID

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_81


8.1.2 删除镜像后,查看当前所有的镜像

docker rmi -f 镜像ID

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_82


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_83

 


8.1.3 拉取阿里云Tomcat镜像

docker pull registry.cn-shanghai.aliyuncs.com/appleyk_test/tomcat:9

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_84

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker_85


启动

docker run --name tomcat9 -p 8081:8080 -d 54

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker命令细讲_86


浏览器访问

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_87


推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_88


进入容器,查看下react-demo源码在不在

 

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_阿里云docker镜像_89

推到镜像仓库的镜像怎么删除 镜像仓库的操作命令_docker hub_90


8.1.4 拉取DockerHub镜像

 

docker pull appleyk/tomcat:9

秒下,为什么,不做解释了,就这样吧,这个不在启动了,结束吧