一、迁移至腾讯云
使用Linux,而CentOs7.6不支持Node.js18所以选择了Docker创建hugo。
Docker
为什么出现?
一款产品:开发–上线 两套环境!
应用环境,应用配置,开发即运维。
环境配置十分麻烦的。
(集群Redis、ES、Hadoop….),发布jar包或者war包,带上环境发布。
项目能不能带上环境安装打包?2、聊聊Docker为什么会出现_哔哩哔哩_bilibili
配置麻烦,不能够跨平台。
传统观念:开发jar,运维来做!
现在:开发打包部署上线,一套流程做完。
Docker给以上问题,提出解决方案。
类比:Java-apk-发布应用商店-使用apk即可
java-jar-打包代环境
Docker思想——容器想象为集装箱——隔离机制。
Docker的历史
2010年-美国成立的公司dotCloud做一些pass的云计算服务!lxc有关的容器技术!
他们将自己的技术(容器化技术)命名为Docker!但是没有引起行业注意!docCloud,就活不下去了。那么
- 就选择开源代码
2013年开源!Docker越来越多人发现了docker的优点!火了,Docker每个月都会更新一个版本!
2014年4月9日,Docker1.0发布!
为什么这么火!轻巧!
容器技术出来之前,我们都是使用的虚拟机技术!19G
虚拟机:Vmware虚拟机多台一台电脑,但笨重!
VM:linux centos原生镜像(一个电脑!)
而docker:隔离,镜像用最核心的环境4m+jdk+mysql 十分的小巧,运行镜像就好了!小巧!几个M几个kb 秒级启动!
- 聊聊Docker
Docker是基于Go语言开发的!开源项目!
基于官方文档学习
Docker: Accelerated Container Application Development
容器化技术:
不是模拟一个完整的操作系统。
直接用在操作系统上,充分利用操作系统的资源。
不同:
- 传统虚拟机,虚拟一个硬件,运行一个完整的操作系统他,在系统上安装和运行软件。
- 容器内的引用hi直接运行在宿主机的上的,容器是没有自己的内容的,也没有虚拟硬件。
- 容器相互隔离,容器都有一个数以自己的文件系统,不糊影响。
更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署引用就和搭积木一样!
项目打包为一个镜像,扩展——服务器A!服务器B!
更简单的系统运维
容器化之后,我们开发,测试环境都是高度一致的。
更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例!服务器的性能能被压榨到极致。
docker run了之后发生了什么?
Docker在本机上寻找镜像——判断本机是否有这个镜像——yes——使用运行这个镜像
——no——Docker上取下载——DockerHub是否可以找到——yes——下载到这个镜像到本地
no——找不到返回错误
底层原理
Docker是怎么工作的?
Docker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket客户端访问。
DockerServer接收到Docker-Client的指令,就会执行这个命令。
客户端命令-守护进程-产生Dokcer
Docker为什么比虚拟机快?
1.Docker有着比虚拟机更少的抽象层
虚拟机变为了容器,直接在Docker Engine上跑
2.docker利用的是宿主机的内核,vm需要是Guest OS
所以新建容器的时候,docker不需要像虚拟机一样重新加载一个操作系统的内核,避免引导。虚拟机是加载Guest OS,分钟级别的,而docker是利用宿主机的操作系统,省略了这个过程,秒级。
NS隔离(容器隔离)
Linux现在都支持了。
Docker常用命令
镜像命令
帮助命令:
docker version
docker info #显示系信息,包括镜像,容器数量
docker --help #万能所有命令
帮助文档下载地址:Reference documentation | Docker Docs
镜像帮助命令
docker images
docker images --help
[root@VM-12-5-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
klakegg/hugo latest-ext b34dd4f95ea2 14 months ago 1.02GB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
#解释
REPOSITORY 镜像仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a,--all #列出所有镜像
-q --quite #只显示ID
下载Mysql
docker search mysql
#可选项,通过收藏过滤
--filter=stars=3000 #搜索出来的stars大于3000
#下载镜像
docker pull
docker pull --help
docker pull mysql
docker pull mysql[:tag]
#默认下载latest
#下载的时候:分层下载,docker image的核心 联合文件系统
docker pull mysql:5.7
#下载5.7版本
这就是linux的联合文件系统。
删除、查看镜像命令
#删除某镜像
docker rmi -f 镜像images的id
#递归id批量删除-删除全部的镜像
docker rmi -f $(docker images -aq)
#docker images查看所有镜像
容器命令
说明:有了镜像才能创建容器。
#下载一个centos基本镜像系统
docker pull centos
#run命令的帮助
docker run --help
新建容器并启动、查看
#参数
--name="Name" #容器名字 tomcat01 tomcat02 用来区分容器
-d #后台
-it #交互运行 进入容器查看内容
-p #指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-p 随机指定端口
docker images #显示所有镜像
#测试,启动并进入容器
docker run -it centos /bin/bash
linux的控制台一般在/bin下
#exit退出,从容器退回主机
exit
#列出所有正在运行的容器
docker ps
-a #列出正在运行、历史运行过的容器
-n=? #显示最近的?个容器
-q #只显示容器的编号
#删除镜像
docker rm mysql 7ce93a845a8a
退出容器
#退出
exit
ctrl+p+q #退出容器不停止
此时就是没有停止,可以看到ps后查看所有正在运行的镜像,centos还在运行而没有停止。
删除容器
docker rm 容器 容器的id
docker rm -f $(docker ps -aq)#删除所有容器
docker ps -a -qixargs docker rm #删除所有容器
启动和停止容器
docker start 容器id
docker restart 容器id #重启
docker stop 容器id #停止
docker kill 容器id #强制停止当前命令
停止
常用的其他命令
后台运行
#docker run -d 镜像名
docker run -d centos
#后台运行必须要有前台服务,没有服务就会自杀——易错
docker ps #查看后发现centos停止了
没有前台服务,exit后后台centos自动停止
查看日志
docker logs --help
docker losgs -f -t --tail 容器id #查看所有日志和时间戳
docker ps
docker run -it centos /bin/bash
ctrl+p+q #退出容器不停止
docker logs -f -t tail 10 容器id #最近10条日志
发现什么日志也没有,那么
-
-tf 显示时间戳和log
–tail number #显示日志的条数
查看容器(容器的信息、源数据)
inspect、top命令
#命令
docker ps
docker top 容器id #
UID用户id PID是进程id
#!!!!!查看镜像源数据——显示容器的所有信息
发现
docker inspect --help
查看具体的操作
docker inspect 容器id #查看容器的源数据
进入容器(当前正在运行的)
#通常容器都是后台运行的,需要进行容器,修改一些配置
#-it:交互模式运行
docker exec -it 容器id bin/bash
#2方式attach
docker attach -it 容器id #是进入正在运行的命令行
docker rm -f $(docker ps -aq) #删除所有
docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach #进入当前容器正在运行的终端,不会启动新的进程!
docker ps
docker images
docker run -it centos /bin/bash
如何将容器文件拷主机
cd /home
touch kaugnsheng.java
ls
docker ps
docker attach 容器id
cd /home #此时在容器内
ls
touch test.java
exit #虽然容器停止了,但是数据还在
docker ps
docker ps -a
docer cp 容器id:/home/test.java /home #从容器拷贝到主机
ls
二、用docker安装nginx
Docker Hub Container Image Library | App Containerization
Dockerhub
#1搜索镜像
#2下载镜像
[root@VM-12-5-centos home]# docker pull nginx
开放3344端口开放,公网的3344可以访问nginx01的80端口
docker run -d --name nginx01 -p 3344:80 nginx
#-d 后台
#--name 给容器命名
#-p 宿主机:容器内端口
[root@VM-12-5-centos home]# docker run -d --name nginx01 -p 3344:80 nginx
15d98bf175044e55e9e5743165cf1fb1256c67c015ea6b0326dd27320b1b018a
[root@VM-12-5-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15d98bf17504 nginx "/docker-entrypoint.…" 26 seconds ago Up 25 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
39fd379b5760 centos "/bin/bash" 18 minutes ago Up 18 minutes intelligent_lovelace
726ca2e767ff klakegg/hugo:latest-ext "hugo server" 24 hours ago Up 24 hours 0.0.0.0:1313->1313/tcp, :::1313->1313/tcp affectionate_golick
#本机自测通过了——在宿主机上开启3344端口,相当于映射到了docker上的nginx的80端口
[root@VM-12-5-centos home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@VM-12-5-centos home]#
现在在阿里云里就能localhost:3344访问到docker的nginx的80端口了
进入容器操作
docker exec -it nginx01 /bin/bash
- 如果阿里云防火墙安全组开了3344端口,那么外网是可以从:外网ip:3344可以访问到界面的。
可视化面板
- portainer(先用这个)
- rancher(ci/cd)再用
图形化界面管理工具,提供一个后台面板供我们操作。
外网8088端口
docker run -d -p 8088:9000\
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
安装后外网的8088端口、设置阿里云安全组,然后即可访问ui界面,看得到多少个镜像、容器在运行和端口映射关系。
或者在curl localhost:8088然后在服务器中访问也可以。
可视化面板。
所有的应用,直接打包部署。
镜像得到的方式:
- 远程仓库下载
- 朋友拷贝给你
- 自己制作镜像
三、理解分层管理
联合文件系统UnionFS
支持对文件系统的修改作为一次提交来一层层叠加。
tomcat和mysql都要用到某个linux内核,那么就只会新增。
层的概念,image+images
docker的镜像实际上是由一层层的文件系统组成的,这种层级的文件系统UnionFS
黑屏—开机的过程中没有了,那么这段时间都是公用的。
**bootfs(boot file system)**相当于省去了这段时间,更快。而且精简的内核OS,例如centos很小。
分层
docker pull redis
这一层已经存在了
docker image inspect redis:laest
查看里面layers
在layer记录
打包的时候会有6个文件
文件能实现替换,也能文件复用。
redis的联合文件系统的表示
在layer中也是6个
所以docker是分层下载的。
特点
run起来的东西可以修改,而镜像是无法修改的。
四、如何提交自己的镜像
commit
docker commit 提交容器成为一个新的副本
#命令和git原理类似
docker commit -m "提交描述的消息" -a"作者"
举例:
将tomcat的docker的webapps的内文件拷贝打牌webapps中,制作一个webapps中有文件的镜像
docker images
docker run -it -p 8080:8080 tomcat #启动docker-tomcat
#1.启动了tomcat的前台
docker ps
docker exec -it 容器id /bin/bash #进入了tomcat控制台
cd webapps
ls
cd..
ls
cp -r webapps.dist/* webapps
发布镜像
root@7803ab322d1d:/usr/local/tomcat/webapps# ls
docs examples host-manager manager ROOT
root@7803ab322d1d:/usr/local/tomcat/webapps# exit
exit
[root@VM-12-5-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7803ab322d1d tomcat "catalina.sh run" 10 minutes ago Up 10 minutes 8080/tcp, 0.0.0.0:8081->8081/tcp, :::8081->8081/tcp cranky_payne
15d98bf17504 nginx "/docker-entrypoint.…" 39 hours ago Up 39 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
39fd379b5760 centos "/bin/bash" 39 hours ago Up 39 hours intelligent_lovelace
726ca2e767ff klakegg/hugo:latest-ext "hugo server" 2 days ago Up 2 days 0.0.0.0:1313->1313/tcp, :::1313->1313/tcp affectionate_golick
#4.将我们操作过的容器通过commit提交为一个新的镜像
[root@VM-12-5-centos ~]# docker commit -a="kuangsheng" -m="add webapps applalala" 7803ab322d1d tomcat02:1.0
sha256:73725f496f3b9c35005b2089ec45f577ed62958d9bf00ca0c3b91455bc683e34
[root@VM-12-5-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 73725f496f3b 11 seconds ago 466MB
tomcat latest 2a60d35653ea 10 days ago 461MB
nginx latest a72860cb95fd 6 weeks ago 188MB
klakegg/hugo latest-ext b34dd4f95ea2 14 months ago 1.02GB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-12-5-centos ~]#
类比学习:VM的快照。
容器数据卷
什么是容器数据卷?
docker的理念回顾,应用和环境打包为一个镜像!
数据?如果数据在容器中,那么将容器删除,数据就会丢失!需求:数据可以持久化
MySQL,容器删了,删除跑路!需求:MySQL数据可以存储在本地
卷技术就是这样!
目录的挂在,将容器内的目录挂载到Linux上面!
总结:容器的持久化和同步操作容器间也是可以数据共享的!
使用数据卷
- 方法一、直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录
#测试
[root@VM-12-5-centos home]# docker run -it -v /home/ceshi:/home centos /bin/bash
#可以看到宿主机有了/ceshi目录
[root@VM-12-5-centos ~]# cd home
-bash: cd: home: No such file or directory
[root@VM-12-5-centos ~]# cd /home
[root@VM-12-5-centos home]# ls
ceshi git git_1 kaungsheng.java lighthouse PoolBee www
[root@VM-12-5-centos home]#
#centos的容器的/home目录
[root@VM-12-5-centos ~]# cd /homge
-bash: cd: /homge: No such file or directory
[root@VM-12-5-centos ~]# cd /home
[root@VM-12-5-centos home]# ls
git git_1 kaungsheng.java lighthouse PoolBee www
[root@VM-12-5-centos home]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@783df7f8b77c /]# cd /home
[root@783df7f8b77c home]# ls
[root@783df7f8b77c home]#
#以后外部放的文件以后就会和docker的cenos的/home目录同步
#查看centos的容器的信息
[root@VM-12-5-centos home]# docker inspect 783df7f8b77c
#Mount中
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",#主机内地址
"Destination": "/home",#docker容器内地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
#测试
#可以看到主机中是空的
[root@VM-12-5-centos home]# cd ceshi
[root@VM-12-5-centos ceshi]# ls
[root@VM-12-5-centos ceshi]#
#在容器中创建test.java
[root@783df7f8b77c home]# touch test.java
[root@783df7f8b77c home]#
#后续在主机中查看到传过来了!
[root@VM-12-5-centos ceshi]# ls
[root@VM-12-5-centos ceshi]# ls
test.java
[root@VM-12-5-centos ceshi]#
同步的过程
如果容器停止,但是在Linux的文件夹更改,还是会同步到容器内绑定的文件夹!
#如果容器停止,但是在Linux的文件夹更改,还是会同步到容器内绑定的文件夹!
#1.让容器停止
[root@VM-12-5-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15d98bf17504 nginx "/docker-entrypoint.…" 39 hours ago Up 39 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
39fd379b5760 centos "/bin/bash" 40 hours ago Up 40 hours intelligent_lovelace
726ca2e767ff klakegg/hugo:latest-ext "hugo server" 2 days ago Up 2 days 0.0.0.0:1313->1313/tcp, :::1313->1313/tcp affectionate_golick
[root@VM-12-5-centos home]# stop 39fd379b5760
bash: stop: command not found...
Similar command is: 'top'
[root@VM-12-5-centos home]# docker stop 39fd379b5760
39fd379b5760
[root@VM-12-5-centos home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15d98bf17504 nginx "/docker-entrypoint.…" 39 hours ago Up 39 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
726ca2e767ff klakegg/hugo:latest-ext "hugo server" 2 days ago Up 2 days 0.0.0.0:1313->1313/tcp, :::1313->1313/tcp affectionate_golick
[root@VM-12-5-centos home]#
#修改宿主机中的文件
#启动容器进行查看
[root@VM-12-5-centos home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09b5fac024a8 5d0da3dc9764 "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago objective_noyce
783df7f8b77c centos "/bin/bash" 19 minutes ago Exited (0) 10 minutes ago affectionate_shaw
7803ab322d1d tomcat "catalina.sh run" 46 minutes ago Exited (130) 22 minutes ago cranky_payne
15d98bf17504 nginx "/docker-entrypoint.…" 40 hours ago Up 40 hours 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
a17f2df4b0c2 centos "/bin/bash" 40 hours ago Exited (127) 40 hours ago eloquent_northcutt
223a694af194 centos "/bin/bash" 40 hours ago Exited (0) 40 hours ago magical_volhard
39fd379b5760 centos "/bin/bash" 40 hours ago Exited (127) 4 minutes ago intelligent_lovelace
28e3e9b4ecdf centos "/bin/bash" 40 hours ago Exited (0) 40 hours ago unruffled_sinoussi
f75f0b03f939 centos "/bin/bash" 40 hours ago Exited (0) 40 hours ago vigilant_euclid
aa158bb7f0e1 centos "/bin/bash" 40 hours ago Exited (0) 40 hours ago elated_robinson
d6dfa990d314 centos "/bin/bash" 40 hours ago Exited (127) 40 hours ago nervous_montalcini
9101ac141b0f centos "/bin/bash" 40 hours ago Exited (127) 40 hours ago competent_mcnulty
02cd07c4283d centos "/bin/basj" 40 hours ago Created upbeat_driscoll
9b872200a3b3 centos "/bin/bash" 40 hours ago Exited (0) 40 hours ago stoic_kepler
8512fca58a26 centos "/bin/basj" 40 hours ago Created hungry_sutherland
7fd5a54afd95 hello-world "/hello" 2 days ago Exited (0) 2 days ago cool_turing
726ca2e767ff klakegg/hugo:latest-ext "hugo server" 2 days ago Up 2 days 0.0.0.0:1313->1313/tcp, :::1313->1313/tcp affectionate_golick
59e514225874 klakegg/hugo:latest-ext "hugo" 2 days ago Exited (255) 2 days ago confident_bassi
[root@VM-12-5-centos home]# docker start 783df7f8b77c
783df7f8b77c
[root@VM-12-5-centos home]# docker attach 783df7f8b77c
[root@783df7f8b77c /]# cd /home
[root@783df7f8b77c home]# ls
test.java
[root@783df7f8b77c home]# cat test/java
cat: test/java: No such file or directory
[root@783df7f8b77c home]# cat test.java
hello linux update
[root@783df7f8b77c home]#
#可以看到成功了!
好处:以后在本地修改,容器中会自动同步。
实战:安装MySQL
思考:MySQL的数据持久化问题!
#下载mysql
#docker search mysql
#进官网看版本
#docker pull mysql:5.7
[root@VM-12-5-centos home]# docker pull mysql:5.7
5.7: Pulling from library/mysql
20e4dcae4c69: Downloading [=============> ] 13.71MB/50.5MB
1c56c3d4ce74: Download complete
e9f03a1c24ce: Download complete
68c3898c2015: Download complete
6b95a940e7b6: Download complete
90986bb8de6e: Download complete
ae71319cb779: Waiting
ffc89e9dfd88: Download complete
43d05e938198: Waiting
064b2d298fba: Waiting
df9a4d85569b: Waiting
[root@VM-12-5-centos home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 73725f496f3b 49 minutes ago 466MB
tomcat latest 2a60d35653ea 10 days ago 461MB
nginx latest a72860cb95fd 6 weeks ago 188MB
mysql 5.7 5107333e08a8 7 months ago 501MB
klakegg/hugo latest-ext b34dd4f95ea2 14 months ago 1.02GB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-12-5-centos home]#
#运行容器进行数据挂载
#安装启动mysql,要配置【用户密码】
#去docker hub找mysql
[root@VM-12-5-centos home]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 73725f496f3b 49 minutes ago 466MB
tomcat latest 2a60d35653ea 10 days ago 461MB
nginx latest a72860cb95fd 6 weeks ago 188MB
mysql 5.7 5107333e08a8 7 months ago 501MB
klakegg/hugo latest-ext b34dd4f95ea2 14 months ago 1.02GB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-12-5-centos home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
4d55165721b1195ccfb240b39dcf2f5cb9d8edd50095305d4197ae55391fbf5b
[root@VM-12-5-centos home]#
#启动我们的mysql
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
mysql - Official Image | Docker Hub
官网中
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-e MYSQL_ROOT_PASSWORD=123456 –name mysql01 mysql:5.7
-e 就是配置环境,那么这里就是设置密码
新建Mysql连接
阿里云安全组、本地防火墙、虚拟机防火墙。
且要保证这个是有程序占用的!
#云服务器LinuxCentos上打开3306,命令行打开或图形化界面打开
#腾讯云安全组设置,本机windows设置防火墙设置出站规则
[root@VM-12-5-centos home]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@VM-12-5-centos home]# firewall-cmd --reload
success
[root@VM-12-5-centos home]#
宝塔面板中可以看到状态,而腾讯云的看不到
重启服务器,然后在宝塔中查看状态为未使用。
已经下载了mysql5.7镜像,然后又删除了原本的mysql01容器,然后重新根据景象创建,成功了!
[root@VM-12-5-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 73725f496f3b 2 hours ago 466MB
tomcat latest 2a60d35653ea 10 days ago 461MB
nginx latest a72860cb95fd 6 weeks ago 188MB
mysql 5.7 5107333e08a8 7 months ago 501MB
klakegg/hugo latest-ext b34dd4f95ea2 14 months ago 1.02GB
hello-world latest d2c94e258dcb 15 months ago 13.3kB
centos latest 5d0da3dc9764 2 years ago 231MB
[root@VM-12-5-centos ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker: Error response from daemon: Conflict. The container name "/mysql01" is already in use by container "4d55165721b1195ccfb240b39dcf2f5cb9d8edd50095305d4197ae55391fbf5b". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
[root@VM-12-5-centos ~]# stop mysql01
bash: stop: command not found...
Similar command is: 'top'
[root@VM-12-5-centos ~]# docker stop mysql01
mysql01
[root@VM-12-5-centos ~]#
[root@VM-12-5-centos ~]# docker rm mysql01
mysql01
#两个容器数据卷进行挂载
# -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql
#1.宿主机/home/mysql/conf--->docker的/etc/mysql/conf.d mysql的配置文件
#2.宿主机/home/mysql/data--->docker的/var/lib/mysql mysql的数据文件
[root@VM-12-5-centos ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
f669f7ef2710692ff207cd5b8889e77289d3631e5419e494ad056fd0e405f504
[root@VM-12-5-centos ~]#
#启动成功后本地是有sqlyog来测试
#sqlyog--连接到服务器的3310--3310和容器中的3306映射,这个时候可以连接上了
具名和匿名挂载
匿名挂载
#
-v 容器内路径
docker run -d -p --name nginx01 -v /etc/nginx nginx
docker volume --help
docker volum ls #查看所有volum的镜像
docker volume ls
这些都是匿名卷,每一个VOLUME NAME
只写了容器内的路径,没有写容器外的路径。
具名挂载
#具名挂载
#通过 -v 卷名:容器内路径
ls
docker run -d -P(随机映射端口) --name nginx02 -v juming-nginx:/etc/nginx nginx
#juming-nginx这个代表是-v的名字VOLUMN NAME而不是路径。
#看一下这个卷
#是在/var/lib/docker/volumes/juming-nginx/_data
# 里面就是默认的具名挂载的位置
#/var/lib/docker/volumes 所有卷存储的位置
#/var/lib/docker docker的所有的文件
如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-V容器内路径
#匿名挂载
-V卷名:容器内路径
#具名挂载
-V/宿主机路径::容器内路径#指定路径挂载!
拓展:-v 容器内路径:ro rw 改变读写权限
#通过 -v 容器内路径:ro rw 改变读写权限
ro readonly #只读
rw readwrite #可读可写
docker run -d -P(随机映射端口) --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P(随机映射端口) --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
#ro 只要看到ro说明路径只能通过宿主机来操作,容器内部是无法操作的。