Docker基础知识及基本命令

1 篇文章 0 订阅
1 篇文章 0 订阅

一、迁移至腾讯云

使用Linux,而CentOs7.6不支持Node.js18所以选择了Docker启动hugo创建stack主题。

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]# 

宝塔面板中可以看到状态,而腾讯云的看不到

pos_id=img-r8SaMlT7-1723374968935)

重启服务器,然后在宝塔中查看状态为未使用。

已经下载了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说明路径只能通过宿主机来操作,容器内部是无法操作的。

inx01 -v /etc/nginx nginx

docker volume --help

docker volum ls #查看所有volum的镜像


docker volume ls

这些都是匿名卷,每一个VOLUME NAME

[外链图片转存中...(img-Yn7S9djv-1723374968935)]

只写了容器内的路径,没有写容器外的路径。

### 具名挂载

```SHELL
#具名挂载

#通过 -v 卷名:容器内路径

ls 

docker run -d -P(随机映射端口) --name nginx02 -v juming-nginx:/etc/nginx nginx

#juming-nginx这个代表是-v的名字VOLUMN NAME而不是路径。

#看一下这个卷

[外链图片转存中…(img-zqTID6Ya-1723374968935)]

[外链图片转存中…(img-6sN1RFhz-1723374968935)]

#是在/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说明路径只能通过宿主机来操作,容器内部是无法操作的。
  • 31
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值