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

自己修改即可,这里是静态文件无需要重启
动态文件需要重启。
相关推荐
隔振消音专家4 小时前
冷水机组振动传导影响及专业化减振适配治理方案
大数据·运维
Brilliantwxx4 小时前
【Linux】 软件包管理器(yum)+ Vim使用
linux·运维·服务器·开发语言·编辑器·vim
skywalk81634 小时前
在FreeBSD的Uubntu兼容环境下安装Reasonix
linux·运维·freebsd
^yi5 小时前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
Kina_C5 小时前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
Android洋芋5 小时前
PrintFriendly网页文章转PDF插件工具及技术分析
运维·服务器·pdf·网页转pdf
Elastic 中国社区官方博客5 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索
RoboWizard6 小时前
金士顿高速闪存盘 单双接口适配多元存储需求
大数据·运维·人工智能·智能手机·云计算
hkj88086 小时前
Ubuntu 20.04 安装 OpenJDK 17
linux·运维·ubuntu
sulikey6 小时前
服务器安装Docker教程。如何在云服务器安装Docker容器?
运维·服务器·ubuntu·docker·安装教程·云服务器