Docker笔记二:Docker拷贝,提交,进入容器和阿里云加速
前言
笔记一介绍了Docker的安装,以及镜像,容器的启动,删除,下载等,本章节记录一些操作
笔记二之后的Docker内容都参考哔哩哔哩的up主:狂神说Java的Docker视频,在此贴出他的主页,推荐去看看,讲的是真的好
常用
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
区别
- exec 进入容器后开启了一个新的终端,可以操作
- attach进入容器正在执行的终端
如果我这个容器在做些什么事,例如不停的在打印日志,exec进去之后由于是新终端不受影响,attach就惨了,一直看到在打印日志,想干点啥都不行
所以,推荐使用exec的方式
退出容器回到主机有2种方式
- exit : 退出容器,回到主机,此时容器也停止了
- 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或者阿里云的,后面讲