docker镜像的构建image

发布于:2025-06-15 ⋅ 阅读:(18) ⋅ 点赞:(0)

docker怎么创建镜像img

关于容器

1.知道为什么要学,要用。
2.容器的生命的周期,仓库下载镜像,基于镜像运行容器,你的程序都在容器里跑着。
3.容器记录也可以提交为镜像,自定义镜像的玩法。
用docker 解决具体的问题
1. 如何访问到你的程序

2, 你的程序产生的数据,如何提取出来。

—1.容器端口映射----

我们使用容器,不单是运行单机程序,当然是需要运行网络服务在容器中,那么如何配置docker的容器网络,基础网络配置,网桥配置,端口映射,还是很重要。

这里的学习思路,是先学习基本的容器网络操作命令

后面环节深入学习docker网络配置。

容器里运行web服务,是基本需求,想要让外部访问容器内应用,可以通过参数

-p  port:port
-P  随机port:port

宿主机:容器
# 测试来说先清理容器的记录
[root@docker-100 ~]# docker rm `docker ps -aq`


创建一个容器

[root@docker-100 /]# docker run --name website-nginx -p 81:80 -d nginx:latest
4353a4176242821c004f1a948d658971ad5510d9aa210cec05a420da73a96a0a

1.用户进行访问
10.0.0.100:81

2.运维进行日志的提取
docker logs 容器id 或者容器的名称

导出日志的思路是
docker logs 容器id > /tmp/nginx-all.log

在这里插入图片描述

如何提取容器的所有的日志

1. 首先查看的容器日志输出在了哪里
docker inspect websit-nginx | grep -i log
[root@docker-100 ~]# docker inspect website-nginx | grep -i log
        "LogPath": "/var/lib/docker/containers/c5735c78b7ebf0681b6e0fd93bd525831b352a1ad43b20eefd5a4d9581c12d80/c5735c78b7ebf0681b6e0fd93bd525831b352a1ad43b20eefd5a4d9581c12d80-json.log",

2.默认的容器的日志是以json的数据的格式保存在docker 这个数据的目录下linux一切文件,你的docker产生的数据都在这个主目录下。
/var/lib/docker/containers/ 

3.提取容器内所有的日志到本地,docker cp 命令。

# 进入这个容器docker exec -i -t website-nginx bash 

例如提取docker 容器docker的日志信息。
docker cp website-nginx:/var/log/nginx/* ./
(容器认识不了这个通配符)

docker cp website-nginx:/var/log/nginx/ ./
[root@docker-100 nginx-log]# tree
.
└── nginx
    ├── access.log -> /dev/stdout
    └── error.log -> /dev/stderr


# 这里常见的作法是将容器内的xx目录,和宿主机上的目录做映射的关系就好比mount 挂载一样。

我们使用的docker容器,也需要关注容器内的存储

Data Volumes是一个可以提供一个或者是多个容器使用的特殊目标

  • 数据卷可以在容器内共享和使用
  • 数据卷的修改会立即的生效
  • 数据卷的更新,不会影响镜像
  • 数据卷会一直的存在,即使容器被删除。

数据卷类似于linux的mount 的挂载。

镜像中被指定为挂载点为目录

其中文件会被隐藏,显示挂载的数据卷。


先看不用数据卷的玩法

去部署一个html的小游戏

需求是,要部署一个小鸟飞飞的游戏代码,如何部署到容器上
【前提是不用数据卷的形式】

# 思路:
1. 启动一个nginx的容器

2,准备好所需要的部署的材料

3.源码拷贝到运行中的容器里

4.目标静态资源地址,配置文件到容器里

5.重启nginx 也可以进入到容器内启动容器

6.提交新容器为新的镜像

7.运行新的容器,使用新的代码

8.代码的更新,如何更新网站

9.最后静态资源无需要重启容器,动态资源,得重启容器。

1.启动一个新得nginx容器

1. 启动一个nginx得容器

先查看docker镜像里有没有nginx得镜像
docker images 

启动nginx容器后台运行
docker run -d nginx:latest 

[root@docker-100 /]# docker run -d nginx:latest 
426f749341ce10bfdda8ff97c5318c7b6bde685588f387c8e4741a25cc84fcb1

2.准备好所部署的材料

1. 首先去gitee去拉取一个小鸟飞飞的代码
git clone https://gitee.com/Serendipity_ej/bird.git

[root@docker-100 xiaoniao]# tree
.
└── bird
    ├── 2000.png
    ├── 21.js
    ├── icon.png
    ├── img
    │   ├── bg1.jpg
    │   ├── bg2.jpg
    │   ├── number1.png
    │   ├── number2.png
    │   ├── s1.png
    │   └── s2.png
    ├── index.html
    └── sound1.mp3


# 写一个小鸟飞飞的nginx配置文件。
[root@docker-100 conf]# cat xiaoniao.conf 
server {
listen 81;
server_name localhost;
	root /xiaoniao/;
	index index.html;
}

3,拷贝到运行中的容器中

# 容器的目标的地址
/etc/nginx/conf.d/

#拷贝到目标机器上
[root@docker-100 /]# docker cp /xiaoniao/conf/xiaoniao.conf  426f749341ce:/etc/nginx/conf.d/


#将静态的资源文件也拷贝到容器的/xiaoniao目录下
[root@docker-100 /]# docker cp /xiaoniao/bird/  426f749341ce:/xiaoniao


4,重启nginx容器

root@426f749341ce:/xiaoniao# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@426f749341ce:/xiaoniao# nginx -s reload 
2025/05/17 13:46:50 [notice] 41#41: signal process started
root@426f749341ce:/xiaoniao# 


# 也可以docker 重启容器
docker restart 426f749341ce

(此时宿主机访问不了81端口,端口还没有暴露)

5,提交新的镜像

[root@docker-100 /]# docker commit 426 xiaoniao-81
sha256:809931d9262c97644efc23c1cb1f080e57574750baf52329649816a7255ce023


[root@docker-100 /]# docker images 
REPOSITORY        TAG              IMAGE ID       CREATED          SIZE
xiaoniao-81       latest           809931d9262c   27 seconds ago   193MB
bird-81           latest           9b33b6759975   19 hours ago     193MB
xiaoniao-nginx    latest           6bf0f88e6a61   19 hours ago     193MB

6,运行新的镜像,使用新的代码的环境

[root@docker-100 /]# docker run -d -p 81:81 xiaoniao-81
a39a8eee39f2cca2dd9e08a35165641068bf36b08d9707daa16863fc988c6fb8


[root@docker-100 /]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
a39a8eee39f2   xiaoniao-81    "/docker-entrypoint.…"   36 seconds ago   Up 35 seconds   80/tcp, 0.0.0.0:81->81/tcp, :::81->81/tcp   nice_cerf
426f749341ce   nginx:latest   "/docker-entrypoint.…"   40 minutes ago   Up 40 minutes   80/tcp                                      charming_fermat
[root@docker-100 /]# 

在这里插入图片描述

7,代码的更新,如何更新网站

# 不用数据卷的情况下,就是把宿主机的文件改了在发给容器


docker cp xiaoniao/  5c4764949d48:/
(这个一般不用)

数据卷映射,和端口映射概念一样

我们从零发布容器

1. 资源如下

-配置文件
[root@docker-100 xiaoniao]# tree 
.
├── 2000.png
├── 21.js
├── conf
│   └── xiaoniao.conf
├── icon.png
├── img
│   ├── bg1.jpg
│   ├── bg2.jpg
│   ├── number1.png
│   ├── number2.png
│   ├── s1.png
│   └── s2.png
├── index.html
└── sound1.mp3

2,运行的环境是
可运行的nginx的镜像


3.代码就直接用宿主机上的源码,就不用反复的 dockers cp 

【就相当于容器调用了宿主机的目录】


docker run -d -p 81:81 -p 80:80 \
-v /xiaoniao/conf/:/etc/nginx/conf.d/ \
-v /xiaoniao/:/xiaoniao/ \
nginx:latest

在这里插入图片描述

- 更新新的网站
在宿主机上更新/xiaoniao/index.html的文件
宿主机和容器共用了这个目录

自己修改即可,这里是静态文件无需要重启
动态文件需要重启。

在这里插入图片描述