windows server 2003镜像_简单入门docker之镜像制作与仓库搭建

本文介绍了Docker的基本概念和与虚拟机的区别,详细阐述了在Windows环境下Docker的安装过程。接着,作者演示了如何下载镜像、创建和使用容器,特别是通过Dockerfile定制nginx镜像。此外,还指导了如何将镜像上传到Docker Hub以及阿里云镜像仓库,以便于管理和部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

    作为一个开发人员,每每在更换电脑或重装系统时,要重新安装开发工具搭建开发环境。所以有的人会封装一下系统(这里指windows),将平时用到的环境和工具全安装在里面,改改OEM,以后换了电脑就直接拿封装的系统安装就方便很多。


    同样但也不一样的,在开发完的应用程序在需要更换IDC或者部署分布式时。针对应用又要重新搭建环境,安装软件依赖等等。所以这时候可以将应用软件以及环境依赖一并作为docker镜像,部署的时候直接拉取镜像,启动后为容器就可以正常运行了。

Docker简介:

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker与虚拟机的区别:

    上面系统封装与镜像制作,我说过两者有相同但也一点不同。所以就以我的理解简单介绍一下Docker与虚拟机的区别。网上也有很多详细介绍两者架构的原理及原理图,这里就略过原理直接说差异。

使用场景:Docker适合隔离应用,虚拟机能隔离用户(更能隔离应用),因为有独立完整的操作系统。

技术方面:虚拟机是通过虚拟化硬件并CPU要支持虚拟化技术,Docker容器只是在宿主操作系统上开启了Docker引擎,比如一个CentOS镜像是一套文件系统,引擎将容器放入到一个进程中并相互隔离。各个容器共用同一套操作系统资源,不需要虚拟化硬件,启动快速。

57e6ddea92bf742e26e246c312be405c.png

Docker的安装:

    在windows下有两个工具, docker toolbox 针对win7, win8,工具集合了Virtual Box(虚拟机软件),Kitematic(docker图形化软件),和其他几个命令终端工具。针对win10的是  Docker for Windows Installer 。

90871f9334c80dcf11d04d575e2f57d6.png

    安装完毕后点击Docker Quickstart启动 Docker Toolbox 终端。命令执行会先在Virtualbox创建一个名字为default的CentOS虚拟机并安装了Docker。CentOS默认账号docker, 密码tcuser,Ip在启动toolbox时在命令板上显示,可以通过Xshell连接。

b32e957b9cc9a8acaad9499fb5087019.png

镜像下载&容器使用:

    最简单的就是打开Kitematic工具,网络正常时会展示主流的镜像,选择其中一个点击“create”就会下载并在左侧栏启动容器。容器的启动和停止重启在图形化界面中也很方便地操作。下面就下载PHP和 Nginx并运行在浏览器打开。

7a42d0d99dcf25277a240f9739193c90.png

f1ff5069a43be4a69624b1ad313b09b2.png

1. nginx,php容器设置与使用

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /var/www;
index index.php index.html index.htm;

if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?/$1 last;
}
}

location ~ \.php {
root /var/www;
fastcgi_pass 192.168.99.100:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /var/www/index.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 192.168.99.100:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

337475d2d01317a37a21eea31346d1c9.png

561006d5af6976cbefbb1ba68a619ed7.png

2. 镜像的制作

    镜像制作就需要使用 Dockerfile ,类似PHP项目中的composer.json,用于构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,将在下一节中介绍,这里你只要知道构建的流程即可。

(1)、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像'>/usr/share/nginx/html/index.html

aaa26a5feb469d0e0772db7fe5af0b64.png

(2)、FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN #  等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件","参数1","参数2"]# 例如:# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:test(镜像名称:镜像标签)。

注:最后的 . 代表本次执行的上下文路径,下一节会介绍。

$ docker build   -t  nginx:test .

501555b4622b0e5249846524fb334419.png

以上显示,说明已经构建成功。

$ docker build   -t  nginx:test .

镜像上传到远程镜像库:

1. 首先在docker hub官网注册一个账号,然后可以正在登陆,Kitematic 也可以登陆试试。

f3ca95ba41ad97a581675363547f489a.png

2.  打开docker cli命令面板,输入docker login,输入docker hub账号密码后,显示login success后,就可以准备自己本地的镜像文件了。

f1e3443d4d3330f3206e772c19fd642d.png

3.  docker images查看本地的所有镜像文件,记住镜像完整名称,然后给要提交的镜像加标签,这时会生成两个镜像ID一样的镜像文件。然后通过docker push 完整的镜像文件:包括标签名,最后就可以推送到自己的镜像库了。

6ab5e5ee2998c1093532c66be8095d24.png

7c6077c5bbda64606943d157a4ed43cf.png

c91e5c5f9c7e019209c01fc0c4f18f8b.png

上传至阿里云镜像库:

1. 首先有阿里云账户,登录成功后开通"容器镜像服务",设置账号密码,并建立空间和仓库,点击管理可以看到登录,拉取,推送的命令。

159e988bdc8c7f9180b8b01fe2c302d9.png

2. 同样的方式打开docker cli命令面板或者xshell连接docker中登录阿里镜像账号,同样的方式找到本地做好的镜像然后推送。

172f6d3b15328aa547015e58a477a75c.png

77224a82528596c644c71e561872c3e2.png

3. 拉取docker hub和阿里镜像都通过 docker pull 完整的镜像名,就可以拉取到本地,然后通过docker images查看。

3a6fb7024efdbd42afa9c793f85ee761.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值