Docker (企业开发)(一)基础学习篇

本文介绍了如何使用Docker快速部署和管理应用,包括Mysql镜像的部署、容器的运行、环境变量设置、数据卷挂载、自定义镜像构建及网络连接。详述了Dockerfile的作用和常用命令,展示了如何创建和连接容器到自定义网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速构建、运行、管理应用的工具(一键部署)

快速入门

1.Mysql 部署 镜像:

拉取MySql镜像
docker pull mysql:latest

查看本地镜像(是否成功安装了MySql)
docker images
 
运行容器
mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

查看是否安装成功(查看进程)
docker ps

查看所有进程
docker ps -a

2.命令解读

docker run -itd
--name mysql-test 
-p 3306:3306 
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123456 
mysql

docker run :创建并运行一个容器,-d 是让容器在后台运行

--name mysql:给容器起个名字,必须唯一

-p 3306:3306:设置端口映射

-e KEY=VALUE︰是设置环境变量

mysql:指定运行的镜像的名字

3.常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档Docker Docs

进入到容器内部的详细命令

一、进入容器内部
docker exec -it mysql-test bash
二、进入mysql
mysql -uroot -p

或者
docker exec -it mysql-test mysql -uroot -p

4.数据卷挂载

(1)概念

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

也就是说,我们在修改宿主机(虚拟机)的定义的文件内容的时候。对应的也是Nginx容器内容的修改

(2)案例一:利用Nginx容器部署静态资源 

需求:

  • 创建Nginx容器,修改nignx容器的html目录下的index.html文件,查看变化

  • 将静态资源部署到nginx的html目录

提示:·在执行docker run命令时,使用-v数据卷:容器内目录可以完成数据卷挂载·当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

创建数据卷
docker run -d --name nginx-test -p 80:80 -v html:/usr/share/nginx/html nginx

//查看详细命令
docker volume --help

//查看对应数据卷的详细信息
docker volume inspect html

//切换到对应的数据卷的 _data文件下
cd /var/lib/docker/volumes/html/_data

ll//查看静态文件
。。。修改对应静态文件
小结:
什么是数据卷?
  • 数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据

如何挂载数据卷?

  • 在创建容器时,利用-v数据卷名:容器内目录完成挂载·容器创建时,如果发现挂载的数据卷不存在时,会自动创建

数据卷的常见命令有哪些?

  • docker volume ls:查看数据卷

  • docker volume rm:删除数据卷

  • docker volume inspect:查看数据卷详情

  • docker volume prune:删除未使用的数据卷

5.本地目录挂载

(1)案例2-MySql容器的数据挂载

需求:

  • 查看mysql容器,判断是否有数据卷挂载

  • 基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)

    挂载/rootimysqlidata到容器内的tvar?libt mysql目录 挂载/root/mysql/ init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本

    挂载/root/mysql/conf到容器内的/etyf mysql/conf.d目录,携带课前资料准备的配置文件

//查看详情
docker inspect ---

提示: 在执行docker run命令时,使用-v本地目录:容器内目录可以完成本地目录挂载 本地目录必须以“/”或"./”开头,如果直接以名称开头,会被识别为数据卷而非本地目录.

-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录

1.删除原来的Mysql容器

docker rm -f mysql-lastest
docker ps(查看是否删除)

2.进入root目录

cd ~

创建并运行新的mysql容器,挂载到本地目录

在 root目录操作
mkdir mysql

进入mysql目录

cd mysql/
#创建以下三个目录
mkdir data
mkdir conf
mkdir init

在root的家目录执行运行如下命令
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql

可以看到data目录有文件了

6.自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

(1)Java镜像部署

linux系统上部署一个Java应用程序:

(2)镜像结构

(3)Dockerfile定义

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。

(4)常见指令:

基于Ubunbtu基础镜像,利用Dockerfile描述镜像结构,也可以直接基于JDK为基础镜像,省略前面的步骤:(也就是说,我们只需要改变我们要导入的jar包即可)

1.创建文件夹

mkdir -p /usr/local/java

2.切换到java目录下

cd /usr/local/java

3.将保存好的Dockerfile文件、jdk8.tar.gz拷贝到java目录下,以及要运行的jar包

4.创建自定义镜像

 docker build -t jdk1.8:v1.0 .

5.查看当前镜像 是否存在名为jdk1.8的镜像

docker images

6.创建镜像

docker build -t docker-demo .

7.执行

docker run -d --name dd -p 8090:8090 docker-demo

8.查看运行日志

docker logs -f dd

9.登录网站

http://192.168.169.128:8090/hello/count

(5)小结:

镜像的结构是怎样的?

镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件,这些文件分层打包而成。

Dockerfile是做什么的? Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像 构建镜像的命令是什么?

docker build -t镜像名Dockerfile目录

7.网络

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上

不能用以上方法,IP地址不固定,如果先启动别的容器地址就会被占用。

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

(1)网络被创建后,进行容器的连接。

a. 创建一个网络

docker network create heima
                      网络名

b.查看是否存在名为heima 的网络learning\Docker

docker network ls

c. 查看IP 地址

ip addr
//IPAddress": "172.18.0.2",

d. 将mysql 连接网络

docker network connect heima mysql-lastest
                       网络名   容器名

e. 查看mysql容器详情(是否存在172.18.0.XX)

docker inspect mysql-lastest
(2)在容器创建的时候直接进行网络连接

a. 删除 dd 容器

docker rm -f dd

b.创建 dd 容器时,加入网络

docker run -d --name dd -p 8090:8090 --network heima docker-demo

c. 查看dd详情(不存在默认网络,创建时加入指定的网络,就不会出现默认为的网络啦~)

docker inspect dd

d. 进入dd容器

docker exec -it dd bash
ping mysql-lastest  //连接成功

ping nginx-test  //连接失败
//不在同一个网桥下,当然不能连接了

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百事老饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值