docker镜像的构建image

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的文件
宿主机和容器共用了这个目录

自己修改即可,这里是静态文件无需要重启
动态文件需要重启。
相关推荐
典学长编程8 分钟前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode39 分钟前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊3 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体4 小时前
Linux快速入门
linux·运维
杨浦老苏5 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
还是奇怪6 小时前
Linux - 安全排查 2
linux·运维·安全
牛奶咖啡136 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源
难受啊马飞2.06 小时前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习
会又不会6 小时前
Jenkins-Email Extension 插件插件
运维·jenkins