制作Docker镜像及dockerfile

276 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

1.手动制作docker镜像

手动构建docker镜像的思路:

  • 先运行一个容器 docker run
  • 进入容器,安装所需程序 docker exec -it 容器名/id bash|/bin/bash
  • 退出容器 exit
  • 提交容器为镜像 docker commit 容器名/id 镜像名

1.1.手动构建centos镜像

1.1.1.配置容器

1.运行一个容器 [root@192.168.146.112/web]# docker run -d -it --privileged -p 222:22 --name centos8.2 centos:latest /usr/sbin/init
ddb12d283ca0992974691f864dd00ffe4dff4ad901a89441883484e066a216a9
--privileged: 指定容器是否为特权容器,特权容器拥有所有的功能 
想要启动服务一定要首先运行/usr/sbin/init如果不运行init第一个进程的话启动服务会报错
报错内容: System has not been booted with systemd as init system (PID 1). Can't operate. 

2.配置yum仓库 [root@192.168.146.112/web]# docker exec -it centos8.2 /bin/bash 
[root@ddb12d283ca0 /]# rm -rf /etc/yum.repos.d/* 
[root@ddb12d283ca0 yum.repos.d]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-8repo ;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo 
% Total % Received % Xferd Average Speed Time Time Time Current 
                           Dload Upload Total Spent Left Speed 
100 2318 100 2318 0 0 3501 0 --:--:-- --:--:-- --:--:-- 3501 
% Total % Received % Xferd Average Speed Time Time Time Current 
                           Dload Upload Total Spent Left Speed 
100 2595 100 2595 0 0 463 0 0:00:05 0:00:05 --:--:-- 628 

3.安装并启动ssh服务 
[root@ddb12d283ca0 yum.repos.d]# yum -y install openssh-server 
[root@ddb12d283ca0 yum.repos.d]# systemctl start sshd 
[root@ddb12d283ca0 yum.repos.d]# systemctl enable sshd 4.设置root口令 
[root@ddb12d283ca0 yum.repos.d]# yum -y install passwd 
[root@ddb12d283ca0 yum.repos.d]# echo "123456" | passwd --stdin root 
Changing password for user root. 
passwd: all authentication tokens updated successfully. 

5.安装其他所需要的软件 
[root@ddb12d283ca0 yum.repos.d]# yum -y install vim libvirt man lrzsz telnet 

6.设置命令别名 
[root@ddb12d283ca0 yum.repos.d]# vim .bashrc alias ls='ls --color' 

7.通过ssh连接容器 
ssh 192.168.146.112 222

测试没有写/usr/sbin/init

image.png

image.png

1.1.2.提交容器为镜像并测试

语法格式:

docker container commit 容器名/id 镜像名:版本

1.提交容器为镜像 
[root@192.168.146.112/web]# docker container commit centos8.2 wzx_centos8.2:v1 sha256:00d5af063ea3e1b060b983d97b8a1111078081a8c179f74b1544e8fd9dbe82b1 

2.查看镜像列表 
[root@192.168.146.112/web]# docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE 
wzx_centos8.2 v1 00d5af063ea3 41 seconds ago 527MB 

3.验证容器是否可用 
[root@192.168.146.112/web]# docker run -d -it -p 333:22 wzx_centos8.2:v1 /usr/sbin/sshd -D 3cfb66891f04b09e6b5071029e97a5111a653f67b9db1c9267aaadfa5e489785 

[root@192.168.146.112/web]# docker ps -a -l 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
3cfb66891f04 wzx_centos8.2:v1 "/usr/sbin/sshd -D" 37 seconds ago Up 36 seconds 0.0.0.0:333->22/tcp, :::333->22/tcp charming_nightingale 

4.登录容器 
[root@192.168.146.112/web]# docker exec -it charming_nightingale /bin/bash 
[root@3cfb66891f04 /]# ps -ef 
UID PID PPID C STIME TTY TIME CMD 
root 1 0 0 06:35 pts/0 00:00:00 /usr/sbin/sshd -D 
root 7 0 0 06:37 pts/1 00:00:00 /bin/bash 
root 23 7 0 06:37 pts/1 00:00:00 ps -e

image.png

1.2.手动构建nginx镜像

1.2.1.配置nginx容器

1.运行一个容器 
[root@192.168.146.112~]# docker run -d -it --privileged -p 80:80 centos:latest /usr/sbin/init 
c9eb83f6802d152cdeec0527e9eed340c663e46bb0611e4ba5b487ab7419c9e9 
--privileged: 指定容器是否为特权容器,特权容器拥有所有的功能 
想要启动服务一定要首先运行/usr/sbin/init如果不运行init第一个进程的话启动服务会报错,报错内容: System has not been booted with systemd as init system (PID 1). Can't operate.

2.进入容器 
[root@192.168.146.112~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
c9eb83f6802d centos:latest "/usr/sbin/init" 6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp infallible_lamarr 
3cfb66891f04 wzx_centos8.2:v1 "/usr/sbin/sshd -D" 12 minutes ago Up 12 minutes 0.0.0.0:333->22/tcp, :::333->22/tcp charming_nightingale 
ddb12d283ca0 centos:latest "/usr/sbin/init" 41 minutes ago Up 41 minutes 0.0.0.0:222->22/tcp, :::222->22/tcp centos8.2 
[root@192.168.146.112~]# docker exec -it infallible_lamarr /bin/bash 
[root@c9eb83f6802d /]# 

3.配置yum仓库 
[root@c9eb83f6802d /]# rm -rf /etc/yum.repos.d/* 
[root@c9eb83f6802d /]# cd /etc/yum.repos.d/ 
[root@c9eb83f6802d yum.repos.d]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-8repo ;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo 

4.安装nginx镜像 
[root@c9eb83f6802d yum.repos.d]# yum -y install nginx 

5.启动镜像 
[root@c9eb83f6802d yum.repos.d]# systemctl start nginx

1.2.2.提交容器为镜像并测试

1.提交容器 
[root@192.168.146.112~]# docker ps -a -l 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
c9eb83f6802d centos:latest "/usr/sbin/init" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp infallible_lamarr 
[root@192.168.146.112~]# docker container commit c9eb83f6802d centos8.2_nginx:v1 sha256:84042258df232dbb7d064de689146788feb318f5ab3c0cda9cb02ffbe8ad707e 

2.运行测试容器 
[root@192.168.146.112~]# docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE 
centos8.2_nginx v1 84042258df23 33 seconds ago 340MB 

[root@192.168.146.112~]# docker run -d -it -p 81:80 centos8.2_nginx:v1 nginx -g 'daemon off;' 
a9cc872da7476cfbe6826f632cd908b21b0ce108b3dc8e21567ff17db300f491 

3.访问

image.png