丹东谁做微网站,大连企业网站模板建站,一站式企业建站制作,网站 数据库 关系一.Docker是干什么的
在没亲自使用过之前#xff0c;再多的术语也仅仅是抽象#xff0c;只有写的人或者使用过的人能看懂。 所以#xff0c;作为新手来说#xff0c;只要知道Docker是用于部署项目就够了#xff0c;下面展示如何用Docker部署项目及Docker常用命令。
二、…一.Docker是干什么的
在没亲自使用过之前再多的术语也仅仅是抽象只有写的人或者使用过的人能看懂。 所以作为新手来说只要知道Docker是用于部署项目就够了下面展示如何用Docker部署项目及Docker常用命令。
二、安装Docker
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包 yum-util 提供yum-config-manager功能另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本验证是否验证成功
docker -v
#6 然后我们就可以启动docker了
systemctl start docker关联知识点Docker进程相关的命令
#1.启动docker服务
systemctl start docker
#2.停止docker服务
systemctl stop docker
#3.重启docker服务
systemctl restart docker
#4.查看docker服务状态
systemctl status docker
#5.设置开机启动docker服务
systemctl enable docker三.用Docker部署应用
简单说就是先搜索镜像然后再拉取下载镜像最后再根据镜像创建容器。
1、部署MySQL
【1】搜索mysql镜像
docker search mysql【2】拉取mysql镜像(这里拉取最新版)
docker pull mysql:latest【3】创建容器
docker run --name mysql-server -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -d mysql:latest–name:容器的名字 -e 设置mysql密码,要记住你设置的密码 -p 3306:3306 将docker中的3306端口映射到宿主机的3306端口外界要访问的就是3306端口 -d 根据什么镜像来创建的
【4】开始使用mysql
docker exec -it mysql-server bash
mysql -uroot -p
或者将两个命令合起来使用
docker exec -it mysql-server mysql -uroot -p
注
1使用docker exec命令可以在容器中启动一个新的进程并且可以与该进程进行交互。2在Docker中-it是两个选项的组合-i和-t。 综合使用-it选项可以在容器中运行交互式进程并且通过终端与之进行交互比如在终端中键入命令或者接收命令的输出。在上述命令中docker exec -it mysql-server mysql -uroot -p打开了一个交互式的MySQL会话可以使用MySQL的命令行工具与数据库进行交互。
【5】用datagrip连接mysql
除了常规的要设置腾讯云防火墙和linux的防火墙连接时候还要将高级的选项除了useSSL要为false,allowPublicKeyRetrieval也要改为true。
2、部署redis
【1】搜索redis镜像
docker search redis【2】拉取redis镜像
docker pull redis:5.0
【3】用该redis镜像创建容器运行
#从docker的6379端口映射到宿主机的6379端口命名为c_redis
docker run -id --namec_redis -p 6379:6379 redis:5.0
四.镜像和容器
1.概念
可以看到有两个非常重要的概念镜像和容器。
【1】Docker 镜像可以看作是一个应用程序运行所需的所有文件和依赖项的打包版本。类比于照片Docker 镜像就像是一张静态的照片记录了应用程序的全部内容和状态。可以通过构建 Dockerfile 文件来创建镜像也可以向 Docker Hub 等镜像仓库下载别人构建好的镜像。我们上面就是拉取别人的镜像。
【2】Docker 容器则是根据镜像创建的运行实例其主要作用是隔离不同的应用程序或应用程序的不同版本以便它们不会相互干扰。类比于卡通里的小木屋Docker 容器就像是一个动态的小木屋可以在其中运行应用程序并与外部系统交互。
为什么要隔离呢比如有两个写好了两个springboot程序一个运行在java8的环境一个运行在java17的环境那样的话如果没有docker或者虚拟机那么两个程序肯定要有一个不能运行。 其他软件之间也可能会发生这种问题不同的app所需的依赖会冲突导致部分程序不能运行这不是我们想看到的。
而Docker容器都有自己的文件系统和网络接口可以看成是类似于虚拟机和其他容器以及宿主机完全隔离。 从logo我们可以看到如果docker是那只鲸鱼那么容器就是上面的集装箱。
2.相关命令
接下来介绍镜像和容器相关的命令
与镜像相关
#查看本地所有的镜像
docker images
##查看所用镜像的id
docker images -q
#搜索镜像从网络中查找需要的镜像
docker search 镜像名称
#拉取镜像从Docker仓库下载镜像到本地镜像名称格式为 名称版本号
#如果版本号不指定则是最新的版本如果不知道镜像版本可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
#删除镜像删除本地镜像
docker rmi 镜像id #删除指定本地镜像
docker rmi docker images -q #删除所有本地镜像
与容器相关
#查看容器
docker ps #查看正在运行的容器
docker ps -a #查看所有容器
#创建容器
docker run 参数
#进入容器退出容器不会关闭
docker exec 参数
#停止容器
docker stop 容器名称/id
#启动容器
docker start 容器名称/id
#删除容器如果容器是运行状态则删除失败需要停止容器才能删除
docker rm 容器名称/id
#查看容器信息如网络信息等
docker inspect 容器名称docker run的参数说明 -i:保持容器运行。通常与-t同时使用。加入it这两个参数后容器创建后自动进入容器后退出容器后容器自动关闭。 -t:为容器重新分配一个伪输入终端通常与-i同时使用。 -d:以守护后台模式运行容器。创建一个容器在后台运行需要使用docker exec进入容器。退出后容器不会关闭。 -name:为创建容器命名。 4.Dockerfile
【1】Dockerfile概念
Dockerfile是一个文本文件包含了一条条指令包含了一条条指令每一条指令构建一层属于基础镜像最终构建出一个新的镜像。
可以统一开发测试运维的环境为整个团队提供一个完全一致的开发环境实现应用的无缝移植。
【2】案例用dockerfile部署springboot容器
1idea中用maven的package命令打包如果之前打包过可能要用clear命令一下。
2用ssh工具例如finalshell上传到服务器我是创建个单独的文件夹docker-files文件夹来存储
3编写dockerfile--不用记重点知道关键字是什么意思
FROM java:17
MAINTAINER flyingpig 1839976096qq.com
ADD uuAttendance-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 9090
WORKDIR /app
CMD java -jar app.jar /app/hello.log
然后就编辑完毕退出使用使用编写好的dockerfile构建镜像
docker build -f ./springboot_dockerfile -t app .
各个步骤的解释【自己根据实际情况进行修改】
#指定父镜像指定dockerfile基于那个image构建
FROM java:17
#定义作者信息用来标明这个dockerfile谁写的
MAINTAINER flyingpig 1839976096qq.com
#将jar包添加到镜像中生成镜像
#其中uuAttendance-0.0.1-SNAPSHOT.jar是原来jar包的名称app.jar是添加到容器后的jar包
ADD uuAttendance-0.0.1-SNAPSHOT.jar app.jar
#指定容器内部的工作目录 如果没有创建则自动创建
#这里自己定义,就知道在哪里不用用find指定去寻找hello.log日志
WORKDIR /app
#定义容器启动执行的命令
CMD java -jar /app/hello.log通过dockerfile构建镜像docker bulid -f dockerfile的文件路径 -t 镜像名称:版本
不写版本表示最新版
docker build -f ./springboot_dockerfile -t app .
【3】遇到的问题
然后你运行你的springboot项目如果说你的项目没调用到数据库那么一点问题都没有。如果说你有用到mysql数据库那么的话程序就无法正常运行打开日志发现报错
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure接下去我们讲讲docker的网络问题。这是不是顺其自然的学习下面这个知识点了O(∩_∩)O哈哈~。
五.Docker网络--Docker如何处理容器的网络访问
【1】会出现上面问题的具体原理这里不讲想了解的话去看狂神的视频:34、Docker0网络详解_哔哩哔哩_bilibili
【2】然后讲讲怎么解决上述的问题 最简单的解决方法就是在每次docker run的时候添加--nethost直接用host作为网络。 如果这样写的话端口映射就可以删了没用。
例如
docker run --name mysql-server --nethost -e MYSQL_ROOT_PASSWORD123456 -d mysql:latestdocker run -id --nethost --namec_redis redis:5.0
’这样就可以实现不同容器之间使用host网络从而可以直接使用localhost访问。
【3】但是这样并不推荐更好的方法是建立一个网络
1.运行以下命令来创建一个自定义网络
#创建一个网络命名为my_network
docker network create my_network
2.创建网络后你可以在启动容器时将其连接到该网络。例如
docker run -id --netmy_network --namec_redis -p 6379:6379 redis:5.0
在这个网络中的容器就可以相互连接啦。
六.服务编排