创建新镜像-从已创建的容器中更新镜像并提交镜像(以Nginx为例)

本文详细介绍如何基于Nginx:1.12版本创建一个包含自定义index.html的Docker镜像,包括运行容器、修改配置文件、提交镜像等步骤。

目标:现在我们主要是修改nginx的index.html,然后做一个新镜像

1、基于nginx:1.12运行一个容器
docker run -d -p 8080:80 --name nginx nginx:1.12
2、进入容器nginx的bash
docker exec -it nginx bash
3、nginx.conf路径:/etc/nginx/nginx.conf,我们可看看里面的内容
root@5096ffe0b74f:/etc/nginx# cat nginx.conf 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	# 包含config.d/下的配置文件
    include /etc/nginx/conf.d/*.conf;
}
4、那么我们可以猜到,基本配置应该在conf.d的某个配置文件中
root@5096ffe0b74f:/etc/nginx# cd conf.d/
root@5096ffe0b74f:/etc/nginx/conf.d# ls
default.conf

default.conf的内容:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
5、最后我们可以到/usr/share/nginx/html下修改index.html:

我就简单修改成一句话。

欢迎来到Nginx!
6、提交容器副本:
docker commit -m="update index.html" -a="Howinfun" nginx(容器ID或容器名) howinfun/nginx:1.0(创建的目标镜像名)
7、docker images可以看到我们创建的镜像:
docker@default:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
howinfun/nginx      1.0                 03fd1aac0888        12 minutes ago      155MB
nginx               1.12                4037a5562b03        17 months ago       108MB
ubuntu              15.10               9b9cb95443b5        3 years ago         137MB
8、基于此镜像启动新容器:
docker run -d -p 8080:80 --name=hyfnginx howinfun/nginx:1.0 
9、可以查看绑定的宿主端口:
docker port hyfnginx -> 返回端口号
docker ps -> PORTS有端口号的信息
10、浏览器访问Nginx:

因为我是在Windows上安装Docker,所以我们访问前必须查看default虚拟机的ip,打开Git Bash,输入命令:

Howinfun@LAPTOP-BHT98468 MINGW64 ~/Desktop
$ docker-machine ip default
192.168.99.100 -> default虚拟机的IP地址

那么如果我们想通过Windows系统直接访问呢,那么可在Oracle VM VirtualBox配置端口转发。最后,我们可以访问192.168.99.100:8080或者127.0.0.1:8080都可以访问到nginx的主页。


<think>好的,我现在需要回答用户的问题:“已经存在镜像,如何创建容器”。首先,我需要确认用户已经有一个Docker镜像,现在想从这个镜像创建运行容器。用户可能对Docker的基本概念有一定了解,但需要具体的步骤指导。 接下来,我应该考虑用户可能的操作环境,比如他们使用的是Linux、macOS还是Windows,但Docker命令通常是跨平台的,所以重点放在通用的命令上。然后,我需要回忆创建容器的基本命令,比如`docker run`,以及常用的参数,比如`-d`、`-p`、`--name`等。 用户可能想知道如何启动一个交互式容器,或者如何在后台运行,以及如何映射端口和挂载卷。需要分步骤说明,确保结构清晰。同时,要提醒用户注意容器镜像的关系,以及创建容器后的管理命令,比如查看运行中的容器、停止和删除容器。 还要考虑是否需要验证容器是否成功创建,比如使用`docker ps`检查运行状态,或者进入容器内部执行命令。此外,可能需要提到一些常见问题,比如端口冲突、容器名称重复等,帮助用户避免错误。 最后,要确保语言简洁,步骤明确,符合用户可见层的要求,结构清晰,分点说明。同时,检查是否有遗漏的重要参数或使用场景,比如环境变量的设置、资源限制等,但根据用户的问题,可能不需要深入这些细节,除非用户有进一步的需求。</think>从已有镜像创建容器的步骤如下(以Docker): ### 一、基础创建方法 1. **启动容器** ```bash docker run [选项] 镜像名 ``` 常用选项: - `-d`:后台运行 - `--name 容器名`:指定容器名称 - `-p 主机端口:容器端口`:端口映射 - `-v 主机路径:容器路径`:目录挂载 ### 二、典型场景示 1. **启动Nginx容器(后台运行+端口映射)** ```bash docker run -d --name my_nginx -p 80:80 nginx:latest ``` 2. **启动交互式Ubuntu容器** ```bash docker run -it --name temp_ubuntu ubuntu:22.04 /bin/bash ``` ### 三、创建后验证 1. **查看运行中的容器** ```bash docker ps ``` 2. **查看全部容器(含已停止的)** ```bash docker ps -a ``` ### 四、容器生命周期管理 1. **停止容器** ```bash docker stop 容器名/容器ID ``` 2. **删除已停止的容器** ```bash docker rm 容器名/容器ID ``` ### 五、高级技巧 1. **环境变量设置** ```bash docker run -e "ENV_VAR=value" 镜像名 ``` 2. **资源限制** ```bash docker run --memory=512m --cpus=1 镜像名 ``` ### 六、注意事项 1. 未指定容器名称时,系统会自动生成随机名称 2. 容器停止后仍会保留文件系统改动 3. 使用`--rm`选项可创建临时容器(退出后自动删除) 通过以上步骤即可基于已有镜像创建容器。实际使用时请将`镜像名`替换为您的实际镜像名称或ID,建议先通过`docker images`命令确认镜像已存在。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值