Docker笔记二:Docker拷贝,提交,进入容器和阿里云加速

前言

笔记一介绍了Docker的安装,以及镜像,容器的启动,删除,下载等,本章节记录一些操作

笔记二之后的Docker内容都参考哔哩哔哩的up主:狂神说Java的Docker视频,在此贴出他的主页,推荐去看看,讲的是真的好

狂神说Java

常用

Docker阿里云加速

默认的国外镜像死慢,用了阿里云速度飞起,强烈建议使用阿里云

直接执行

vim /etc/docker/daemon.json

第一次应该是没有的,是空的,复制下面的粘贴进去

{
	"registry-mirrors": ["https://f1z25q5p.mirror.aliyuncs.com"]
}

然后按下ESC,输入冒号,wq保存退出,这是vim的基本操作

最后重启一下Docker即可

sudo systemctl daemon-reload
sudo systemctl restart docker

删除全部的镜像或容器

docker images -q是查看所有的镜像Id,使用$()作为变量传进去,即可删除所有的镜像

docker rmi -f $(docker images -aq)

同样删除所有的容器也是

docker rmi -f $(docker ps -aq)

进入容器内的2种方式及区别

第一种方式是exec

docker exec -it 容器id bash

第二种方式是attach

docker attach 容器id

区别

  1. exec 进入容器后开启了一个新的终端,可以操作
  2. attach进入容器正在执行的终端

如果我这个容器在做些什么事,例如不停的在打印日志,exec进去之后由于是新终端不受影响,attach就惨了,一直看到在打印日志,想干点啥都不行

所以,推荐使用exec的方式

退出容器回到主机有2种方式

  1. exit : 退出容器,回到主机,此时容器也停止了
  2. ctrl + p + q : 退出容器,回到主机,此时容器还在运行

Docker日志

后面跟着容器Id即可,如果不指定tail数量的话,会显示所有的日志,太多了

docker logs -tf --tail 10 f82267cbb532

查看容器中的进程信息

docker top mysql

查看容器信息

docker inspect mysql

容器和主机之间拷贝数据

经常有这种情况,开发的时候,一张图片啥的忘了发布到容器里了,你说我为了一张图片就重新打包发布容器,还不如之间拷贝近容器呢

关于拷贝有两种情况

容器内拷贝到主机

容器内的test.java文件拷贝到主机的home目录下

docker cp 容器id:/home/test.java /home

主机拷贝到容器内


各种启动

测试启动是否成功,可以用浏览器访问,也可以使用

curl localhost:9200

Docker启动Mysql

docker run --restart=always  --name mysql   -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test123  -d mysql  mysql

如果遇到了启动mysql就退出的情况,使用 --restart即可alway是始终重启

但是这样我的mysql状态一直是restart,而不是run,我主机上连不上Mysql

刚开始我以为是防火墙的问题

##Centos7 防火墙打开端口号
firewall-cmd --zone=public --add-port=3306/tcp --permanent
 
#下面3行是参数说明
#–zone				        #作用域
#–add-port=80/tcp		#添加端口,格式为:端口/通讯协议
#–permanent			        #永久生效,没有此参数重启后失效
 
#重启防火墙后看看是否生效
firewall-cmd --reload		#重启firewall
firewall-cmd --list-ports	#查看已经开放的端口
 
#如果想永久停止防火墙,执行下面操作
systemctl stop firewalld.service         #停止firewall
systemctl disable firewalld.service      #禁止firewall开机启动
 
#查看防火墙状态
firewall-cmd --state

然后我开启了3306,但是还是连不上,这个时候查出来的说可能是root默认本地连接,需要开启远程连接

但是进不去mysql容器,说不是在run,一直在restart,所以进不去容器

我只好删了这个mysql容器,然后重新启动

docker run --name mysql   -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test123 mysql

我删除了一直restart,也删除了-d后台运行,这才可以了

Docker启动nginx

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

Docker启动Tomcat

docker pull tomcat
docker run --name tomcat -p 8080:8080 -d tomcat 

然后直接访问8080端口发现,404未找到,这个是因为我们已经配置了阿里云的镜像,阿里云默认下载的Tomcat是最精简的,webapps目录下啥都没有

docker exec -it tomcat bash

进入之后,ll都用不了,使用ls -a发现webapps下面是空的

webapps下面是空的,webapps.dist下面却是有内容的,直接把dist下的东西拷贝到webapps下即可

 cp -r webapps.dist/* webapps

然后再访问8080,成功了

Docker启动ElasticSearch

ElasticSearch默认是1个G的内存,所以启动的时候最好限制一下内存大小

docker pull elasticsearch

docker run --name elasticsearch -p 9200:9200  -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  -d elasticsearch 

使用-e来限制最小,最大内存

Docker可视化

介绍几个Docker的可视化工具,其实敲命令挺好的

portainer

直接docker pull 安装运行,然后浏览器访问,我这不写了,反正我喜欢敲命令,可以网上找文章参考

Docker Commit

就是提交镜像,还是拿Tomcat为例吧,我阿里云下载的Tomcat,webapps里面没有东西

我从dist复制到webapps文件夹下面了,然后我把这个改过的Tomcat重新commit了一次,成为了一个新的镜像,这个时候我docker images可以看到两个Tomcat,我commit的命名是tomcat1,版本1.0

#把我改过的tomcat commit一下
docker commit -a "vae" -m "tomcat is run ok" 50a7091b7fcf tomcat1:1.0

#我把原来的tomcat删了,启动我commit的这个新的tomcat1
docker run --name tomcat -p 8080:8080 -d tomcat1:1.0

其实这个commit就是提交的意思,提交到了镜像,我也可以push到DockerHub或者阿里云的,后面讲

posted @ 2020-05-24 23:47  蜀云泉  阅读(694)  评论(0编辑  收藏  举报