Docker简单案例

我们安装完Docker之后就可以练习了.

镜像

案例1-拉取、查看镜像

1)首先去镜像仓库搜索nginx镜像,比如 : Docker Hub Container Image Library | App Containerization

搜索我们想要拉取的镜像 , 例如: nginx

复制命令:

java 复制代码
docker pull nginx

输入命令:

java 复制代码
docker pull nginx

默认情况是最新版本 docker pull nginx:latest , 也可以拉取自己想要的版本, 例如 : docker pull nginx:5.7

通过命令:docker images 查看拉取到的镜像

java 复制代码
docker images

案例2-保存、导入镜像

需求:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

1)利用docker xx --help命令查看docker save和docker load的语法

例如,查看save命令用法,可以输入命令:

java 复制代码
docker save --help

命令格式:

docker save -o [保存的目标文件名称] [镜像名称]

2)使用docker save导出镜像到磁盘

运行命令:

java 复制代码
docker save -o nginx.tar nginx:latest

结果如图:

3)使用docker load加载镜像

先删除本地的nginx镜像:

java 复制代码
docker rmi nginx:latest

然后运行命令,加载本地文件:

java 复制代码
docker load -i nginx.tar

结果:

练习

需求:去DockerHub搜索并拉取一个Redis镜像

目标:

1)去DockerHub搜索Redis镜像

2)查看Redis镜像的名称和版本

3)利用docker pull命令拉取镜像

4)利用docker save命令将 redis:latest打包为一个redis.tar包

5)利用docker rmi 删除本地的redis:latest

6)利用docker load 重新加载 redis.tar文件

容器

案例-创建并运行一个容器

创建并运行nginx容器的命令:

java 复制代码
docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • --name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx:latest

这里的 -p 参数,是将容器端口映射到宿主机端口。

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这 样就能访问到nginx了:

演示:

创建并运行nginx

java 复制代码
 docker run --name nginxDocker -p 8080:80 -d nginx:latest

查看所有容器和运行状态

java 复制代码
docker ps

打开浏览器输入(虚拟器ip地址:端口号)

查看日志:

这里查看日志需要一个查看的内容, 我们输入我们运行时起的名称 例如 : nginxDocker

我们可以看到日志中有一次GET请求

我们刷新一下页面再次查看日志中有两次请求.

在docker logs 中有一个参数 -f 跟踪日志

ctrl + c 结束跟踪日志.

案例-进入容器,修改文件

需求:进入Nginx容器,修改HTML文件内容,添加"苏麟梦想之地字节跳动"

提示:进入容器要用到docker exec命令。

步骤

1)进入容器。进入我们刚刚创建的nginx容器的命令为:

java 复制代码
docker exec -it nginxDocker bash

命令解读:

  • docker exec :进入容器内部,执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • nginxDocker :要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

2)进入nginx的HTML所在目录 /usr/share/nginx/html 容器内部会模拟一个独立的Linux文件系统,看起来如同一个linux服务器一样:

nginx的环境、配置、运行文件全部都在这个文件系统中,包括我们要修改的html文件。 查看DockerHub网站中的nginx页面,可以知道nginx的html目录位置在 /usr/share/nginx/html 我们执行命令,进入该目录:

java 复制代码
cd /usr/share/nginx/html

我们查看一下index.html

3)修改index.html的内容

容器内没有vi命令,无法直接修改,我们用下面的命令来修改:

java 复制代码
sed -i -e 's#Welcome to nginx#苏麟真的c#g' index.html
java 复制代码
sed -i  -e 's#<head>#<head><metacharset="utf-8">#g' index.html

小结

docker run命令的常见参数有哪些?

  • --name:指定容器名称
  • -p:指定端口映射
  • -d:让容器后台运行

查看容器日志的命令:

  • docker logs
  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps
  • docker ps -a 查看所有容器,包括已经停止的

练习

需求:去DockerHub搜索并拉取一个Redis镜像并运行,切支持数据持久化

目标:

1)去DockerHub搜索并拉取一个Redis镜像

2)查看Redis帮助信息

3)利用docker run命令运行容器

拉取代码

java 复制代码
docker pull redis

运行容器

java 复制代码
docker run --name rs -p 6379:6379 -d redis redis-server --save 60 1 --loglevel warning

用redis可视化工具连接虚拟机redis

进入redis并存储key

java 复制代码
docker exec -it re redis-cli

查看存储的key

数据卷

案例-创建和查看数据卷

需求:创建一个数据卷,并查看数据卷在宿主机的目录位置

① 创建数据卷

java 复制代码
docker volume create html

② 查看所有数据

java 复制代码
docker volume ls

③ 查看数据卷详细信息卷

java 复制代码
docker volume inspect html

可以看到,我们创建的html这个数据卷关联的宿主机目录为 /var/lib/docker/volumes/html/_data 目录。

案例-给nginx挂载数据卷

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

分析 :上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位 置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。 提示:运行容器时使用 -v 参数挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的HTML目录

java 复制代码
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 进入html数据卷所在位置,并修改HTML内容

java 复制代码
# 查看html数据卷的位置
docker volume inspect html

# 进入该目录
cd /var/lib/docker/volumes/html/_data

# 修改文件
vi index.html

创建并挂载

修改内容

访问:

案例-给MySQL挂载本地目录

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录
  • 直接挂载模式:宿主机目录 ---> 容器内目录

如图:

语法:

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]
  • -v [宿主机文件]:[容器内文件]

需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

实现思路如下:

1)将mysql.tar文件上传到虚拟机,通过load命令加载为镜像或者自己拉取

2)创建目录/tmp/mysql/data

3)创建目录/tmp/mysql/conf,将hmy.cnf文件上传到/tmp/mysql/conf

4)去DockerHub查阅资料,创建并运行MySQL容器,要求:

① 挂载/tmp/mysql/data到mysql容器内数据存储目录

② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

③ 设置MySQL密码

创建文件 hmy.cnf并把下面复制到文件内(可以在电脑上写,写完长传到linux)

mysqld

skip-name-resolve

character_set_server=utf8

datadir=/var/lib/mysql

server-id=1000

编写自己的: 名称 , 端口号

java 复制代码
docker run \

--name mysqlDocker \

-e MYSQL_ROOT_PASSWORD=root \

-p 3396:3306 \

-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \

-v /tmp/mysql/date:/var/lib/mysql \

-d mysql:latest
  • --name mysqlDocker 名称
  • -e MYSQL_ROOT_PASSWORD=root 密码
  • -p 端口号3396:3306 \
  • -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ 挂载
  • -v /tmp/mysql/date:/var/lib/mysql \ 挂载
  • -d mysql:latest 版本

查看连接 : 连接成功成功

小结

docker run的命令中通过 -v 参数挂载文件或目录到容器中:

  • -v volume名称:容器内目录
  • -v 宿主机文件:容器内文
  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

这期就到这里!

相关推荐
一水鉴天10 小时前
整体设计 逻辑系统程序 之18 Source 容器(Docker)承载 C/P/D 三式的完整设计与双闭环验证 之2
docker·架构·认知科学·公共逻辑
飞快的蜗牛12 小时前
利用linux系统自带的cron 定时备份数据库,不需要写代码了
java·docker
火星MARK12 小时前
k8s面试题
容器·面试·kubernetes
香吧香13 小时前
Docker Registry 使用总结
docker
赵渝强老师13 小时前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
haicome14 小时前
deepseek部署
docker·ragflow·deepseek 部署
乄bluefox15 小时前
保姆级docker部署nacos集群
java·docker·容器
每天进步一点_JL15 小时前
Docker 是什么?
后端·docker·容器
一叶飘零_sweeeet16 小时前
从 0 到 1 掌控云原生部署:Java 项目的 Docker 容器化与 K8s 集群实战指南
docker·云原生·kubernetes·项目部署
森林猿16 小时前
docker-compose-kafka 4.1.0
docker·容器·kafka