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的文件
宿主机和容器共用了这个目录
自己修改即可,这里是静态文件无需要重启
动态文件需要重启。