欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Docker基础

Docker基础

2025/8/9 2:23:06 来源:https://blog.csdn.net/w13114/article/details/141759361  浏览:    关键词:Docker基础

目录

介绍

Docker架构

Docker安装(已完成)

命令

进程

镜像

容器

部署程序

部署MySQL​编辑

部署Redis

Compose

安装【已完成】

使用

案例

数据库迁移

将本地数据导出成sql文件

连接服务器上的数据库

修改字符

将sql文件导入服务器中的数据库

数据卷

后端程序部署

安装jdk

打包

上传jar包

运行程序

前端程序部署

镜像制作

使用Dockerfile制作镜像

使用容器制作镜像

镜像导入导出


介绍

Docker是一个开源的应用容器引擎,主要作用是方便我们快速安装部署软件和程序

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上

Docker架构

运行程序----> 运行在容器中----> 镜像创建出来的-----> 镜像仓库下载过来的

仓库(Repository):仓库是集中存放镜像文件的场所

镜像(Image):镜像是用来创建容器的模版,就像是Java中的类和对象一样

容器(Container):容器是从镜像创建的运行实例,它可以被启动、停止、 删除,每个容器都是相互隔离的、保证安全的平台

Docker安装(已完成)

本课程基于CentOS 7安装Docker:

 # 1、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 yum install -y yum-utils device-mapper-persistent-data lvm2​# 2、设置yum源yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo​# 3、安装docker,出现输入的界面都按 y yum install -y docker-ce​# 4、查看docker版本,验证是否验证成功docker -v​# 5、启动docker环境systemctl start docker​# 6、设置开机自启动systemctl enable docker

默认情况下,将来从docker hub(https://hub.docker.com/)上下载docker镜像,太慢。一般都会配置镜像加速器:

创建或修改 /etc/docker/daemon.json文件,修改为如下形式:

 {"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn","https://mirror.baidubce.com"]}
 # 重启dockersystemctl restart docker​# 查看是否成功docker info

命令

进程

 # 启动服务systemctl start docker ​# 停止服务 systemctl stop docker​# 重启服务  systemctl restart docker​# 查看服务的状态   systemctl status docker ​# 设置开机自启动 systemctl enable docker

镜像

 # 查看本地镜像 docker images​# 搜索镜像仓库,推荐:https://hub.docker.com/docker search 镜像名称 ​# 下载(拉取)镜像,镜像名称格式为 名称:版本号docker pull 镜像名称​# 删除镜像(慎重)docker rmi 镜像名称

想要在当前虚拟机运行一个nginx程序

 1. 搜索docker仓库中有哪些版本的nginx镜像​2. 从docker的镜像仓库中拉取到nginx 1.18.0的镜像文件        ​3. 查看本地的镜像   ​4. 从本地删除nginx的镜像 ​

容器

 # 查看本地容器docker ps     # 能查看正在运行docker ps -a  # 能查看所有的容器(运行的和停止的)​# 创建一个新的容器并运行(-d  后台运行容器,并返回容器ID  -p 主机端口:容器端口  指定映射关系)docker run -d -p 80:80 --name=容器名 镜像名称​# 进入容器内部docker exec -it 容器名称 /bin/bash​# 启动容器docker start 容器名称​# 停止容器docker stop 容器名称​# 删除容器docker rm 容器名称

场景: 使用nginx镜像运行出一个nginx容器(就是一个可以对外提供服务的nginx程序)  ​

如果服务器提示你

说明你的linux服务关闭了请求转发功能, docker容器访问一般是需要做转发的,怎么开启呢?

修改文件vim /usr/lib/sysctl.d/00-system.conf,在最后追加一行net.ipv4.ip_forward=1

改完之后需要重启网络服务systemctl restart network

部署程序

部署MySQL

# 拉取mysql镜像
docker pull mysql:5.7# 创建并启动容器
docker run -d -p 3306:3306 --name=mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

部署Redis

# 拉取redis镜像
docker pull redis:5.0# 创建并启动容器
docker run -d --name=redis5.0 -p 6379:6379 redis:5.0

Compose

服务编排 docker-compose k8s

在以后的开发中,可能存在同一环境中出现多个程序的情况,这些程序都会单独的作为容器启动,比如说:

  • container-order 订单程序

  • container-user 用户程序

  • container-redis redis

  • container-mysql mysql

这些容器需要同时启动,同时停止,如果我们一个个的去操作,就会变的很麻烦,这时候我们就需要一个批量操作容器的工具

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用

Compose通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景

安装【已完成】

# 安装docekr compose 工具
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 设置权限
chmod +x /usr/local/bin/docker-compose# 查看版本 
docker-compose -version

使用

docker-compose主要是通过一个配置文件和几个命令来管理多个容器的

配置文件用于配置多个容器信息,命令用于控制多个容器的行为

注意: 上面两条命令执行位置必须跟docker-compose.yml位于同一个目录

案例

通过docker compose进行容器批量管理:一次性启动两个容器(mysql,redis)

1) 创建docker-compose目录

mkdir ~/a/docker-compose -pv
cd ~/a/docker-compose

2) 创建docker-compose.yml文件,内容如下

version: '3'
services: mysql:container_name: my_mysqlimage: mysql:5.7ports:- 3306:3306environment:MYSQL_ROOT_PASSWORD: rootcollation-server: utf8mb4_unicode_cicharacter-set-server: utf8mb4    redis:container_name: my_redisimage: redis:5.0ports:- 6379:6379

3) 启动容器

# 为了演示效果更佳明显,我们使用下面命令先停止并删除所有容器
docker stop $(docker ps -q)
docker rm $(docker ps -aq)# 执行命令,启动容器
# 执行此命令的时候,需要和配置文件在同一个目录下
docker-compose up -d

4) 停止并删除容器

# 执行此命令的时候,需要和配置文件在同一个目录下
docker-compose down 

数据库迁移

将本地数据导出成sql文件

连接服务器上的数据库

修改字符

utf8mb4_0900_ai_ci 替换为 utf8_general_ci

utf8mb4 替换为utf8

将sql文件导入服务器中的数据库

数据卷

思考这样两问题:

  • Docker容器删除后,容器中的数据会不会永久丢失,如果是,岂不是很危险?

  • 容器之间可不可以实现文件的共享呢?

数据卷:

  • 数据卷是宿主机中的一个目录或文件,它可以被挂载到容器中,在容器中对它的操作可以直接反应到宿主机上

  • 一个容器可以被挂载多个数据卷,一个数据卷也可以被多个容器同时挂载

将数据库的data目录映射到Linux宿主机上

2) 停止mysql

docker-compose down

2) 准备一个空目录存储数据库信息

mkdir -p ~/a/data

3) 修改docker-compose.yml添加数据卷

version: '3'
services: tomcat:container_name: my_mysqlimage: mysql:5.7ports:- 3306:3306   environment:MYSQL_ROOT_PASSWORD: rootcollation-server: utf8mb4_unicode_cicharacter-set-server: utf8mb4volumes:- /root/a/data:/var/lib/mysqlredis:container_name: my_redisimage: redis:5.0ports:- 6379:6379

4) 重启容器

docker-compose up -d

5) 重新导入一遍数据库

后端程序部署

安装jdk

#1 解压tar -zxvf /root/a/jdk-11.0.18_linux-x64_bin.tar.gz -C /usr/local/
#2 配置环境变量vim /etc/profileexport JAVA_HOME=/usr/local/jdk-11.0.18export PATH=$PATH:$JAVA_HOME/bin
#3 更新配置文件source /etc/profile
#4 测试java -version

打包

修改配置文件中mysql和redis的连接信息,然后使用maven插件打出jar包

上传jar包

将得到的web.jar包上传到服务器上

运行程序

java -jar /root/web.jar --server.port=9090

上面方式会占据控制台运行,下面是后台运行

nohup java -jar /root/web.jar --server.port=9090 > /root/web/9090.log &

查看日志

tail -f /usr/local/9090.log

前端程序部署

Nginx是一款轻量级的Web服务器,由俄罗斯的程序设计师伊戈尔·西索夫所开发。

Nginx性能非常优秀,官方测试 nginx 能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

Nginx的作用有很多,我们经常使用的是用它来做静态资源服务器、负载均衡服务器和反向代理服务器。

负载均衡配置

	upstream a{server 192.168.150.3:9090;server 192.168.150.3:9091;}server {listen       8077;server_name  localhost;# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://a;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header REMOTE-HOST $remote_addr;}}

镜像制作

使用Dockerfile制作镜像

Dockerfile是一个用于描述生产docker镜像的文件,它里面是一条条的指令,每条指令都会对镜像产生一定影响

案例:基于jdk1.8环境运行springboot项目,打包为镜像

1) 将springboot-hello-0.0.1-SNAPSHOT.jar上传到linux

2) 创建一个springboot-dockerfile文件,内容如下

# 定义基础镜像(从哪个镜像的基础上开始做)
FROM java:8 
# 定义作者信息(可以省略)
MAINTAINER  itheima <a@a.cn>
# 将jar包添加到容器,并改名为app.jar
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
# 镜像启动容器的时候,执行的命令
CMD java -jar app.jar

3) 通过dockerfile构建镜像

# -f :指定要使用的Dockerfile路径   -t :指定生成的镜像名称   .  镜像构建过程中的上下文环境的目录 	
docker build -f ./springboot-dockerfile -t app-a.

4) 查看生成的镜像,并运行为容器

[root@a~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
app-a                latest              663f3e3e33fb        35 minutes ago      661MB[root@itcast ~]# docker run -d -p 18080:8080 app-itheima:latest
5ea166a3dbec4c091d7a70f84b75703f55a9ccd93f3a45466e4eeb9ac56fdb17[root@a~]#
[root@a~]# docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED            PORTS                         NAMES
5ea166a3dbec        app-a:latest   "/bin/sh -c 'java -j…"   7 seconds ago      0.0.0.0:18080->8080/tcp       serene_antonelli

使用容器制作镜像

docker允许将一个容器直接转化为镜像,使用的命令如下:

docker commit 容器id 镜像名称:版本号

案例:修改当前的nginx容器中的index.html文件内容为hehe,然后将修改后的容器做成一个名为mynginx:hehe的镜像

 #1. 查看当前正在运行的容器[root@a~]# docker psCONTAINER ID        IMAGE        COMMAND                 CREATED             STATUS              PORTS                     NAMES0ce0bf14399d        nginx       "/docker-entrypoint.…"   14 hours ago        Up 14 hours         0.0.0.0:80->80/tcp        nginx​#2. 进入nginx容器,然后向主页面覆盖写入"hehe",然后退出容器[root@a~]# docker exec -it nginx /bin/bashroot@0ce0bf14399d:/# echo "hehe" > /usr/share/nginx/html/index.htmlroot@0ce0bf14399d:/# exit​#3. 将修改之后的容器生成为mynginx:hehe镜像[root@a~]# docker commit nginx mynginx:hehesha256:139a9ea6a6008bc5557566e54316ccd8b93f508dba1daf7296235a461c8d471e​#4. 查看镜像[root@a~]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEmynginx             hehe                139a9ea6a600        8 seconds ago       133MB

镜像导入导出

需求:将mynginx:hehe镜像共享给其他人,或者是将别人共享给的镜像包导入到系统中 

 # 将镜像保存成tar包: docker save -o 包名 镜像:版本[root@a ~]# docker save -o mynginx.tar mynginx:hehe[root@a ~]# lsmynginx.tar​# 接下来删除我们本地的mynginx:hehe镜像[root@a ~]# docker rmi mynginx:heheUntagged: mynginx:heheDeleted: sha256:0121bd7115b67719cc215cea3c2a2b090c0a42a1d70cbd46d4d243fa9c8b0edd​# 然后再从tar包中将镜像导入到本机[root@a ~]# docker load -i  mynginx.tarLoaded image: mynginx:hehe

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词