Docker 制作容器镜像
2022-03-27 本文已影响0人
Rinaloving
使用 docker commit命令
docker commit : 提交一个正在运行的容器为一个新的镜像
- 拉取一个基础镜像(其实就是os)
默认拉取的是最新版本centos, 这里我们指定7(docker pull centos:7)
docker pull centos
[root@localhost ~]# docker pull centos:7
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
- 创建以恶搞交互式容器
这种方式无法部署 .net core 后台(因为无法设置容器启动,后台也跟着启动)
docker run -it --name mycentos centos:7 /bin/bash
使用这种方式创建容器
docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
查看是否创建成功
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockernjdk latest 6650bd7b294a 2 days ago 548MB
registry.cn-hangzhou.aliyuncs.com/rina/my_dockernjdk v1 6650bd7b294a 2 days ago 548MB
dockerdemo latest a42c8ba3496d 3 days ago 212MB
registry.cn-hangzhou.aliyuncs.com/rina/my_nginx v1 f2f70adc5d89 7 days ago 141MB
1426429456/my_nginx v1 f2f70adc5d89 7 days ago 141MB
nginx latest f2f70adc5d89 7 days ago 141MB
mcr.microsoft.com/dotnet/aspnet 3.1 f0220ee3f874 7 days ago 208MB
centos 7 eeb6ee3f44bd 6 months ago 204MB
mcr.microsoft.com/dotnet/core/aspnet 2.1-stretch-slim 1a48139335f8 7 months ago 253MB
启动容器
[root@localhost ~]# docker run -it --name mycentos centos:7 /bin/bash
要想.net core 后台能启动,这里也必须这样创建
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
进入容器
docker exec -it centos7 /bin/bash # 进入容器
修改配置
SSH Connecting to 192.168.70.131
SSH Host key fingerprint:
SSH SHA256 a1f00e21b2a2f60d3d1f6c4d50cd1854ffc1a5df106810d0cb8558fee018e6cf
SSH Trying saved password
Last login: Fri Mar 25 18:41:47 2022 from 192.168.70.1
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b04263a3ee14 mynjdk "/usr/sbin/init" 7 minutes ago Up 7 minutes 0.0.0.0:8888->5003/tcp, :::8888->5003/tcp t1
f325c82add38 centos:7 "/usr/sbin/init" 46 minutes ago Up 46 minutes mycentos7
4194e389a5e1 nginx:latest "/docker-entrypoint.…" 43 hours ago Up 10 hours 0.0.0.0:81->80/tcp, :::81->80/tcp my_nginx_2022
[root@localhost ~]# docker restart b04263a3ee14
b04263a3ee14
[root@localhost ~]#
这样从外面就可以访问了
- 软件上传:上传到宿主机(自己的项目)
[root@localhost ~]# cd /usr/local
[root@localhost local]# ls
aspnetcore-runtime-2.1.30-linux-x64.tar.gz bin dotnet-sdk-2.1.526-linux-x64.tar.gz etc games include lib lib64 libexec NJDK sbin share src www XXFB
[root@localhost local]# docker cp dotnet-sdk-2.1.526-linux-x64.tar.gz mycentos:/usr/local
- 安装.net core 2.1 环境
[root@26a7ed9e7aa7 local]# yum -y install libicu
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirrors.cn99.com
* extras: mirrors.cn99.com
* updates: mirrors.cn99.com
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/4): extras/7/x86_64/primary_db | 246 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.1 MB 00:00:01
(4/4): updates/7/x86_64/primary_db | 14 MB 00:00:10
Resolving Dependencies
--> Running transaction check
---> Package libicu.x86_64 0:50.2-4.el7_7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================================================================================================================================================== Package Arch Version Repository Size
===================================================================================================================================================================================================================================Installing:
libicu x86_64 50.2-4.el7_7 base 6.9 M
Transaction Summary
===================================================================================================================================================================================================================================Install 1 Package
Total download size: 6.9 M
Installed size: 24 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/libicu-50.2-4.el7_7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY==========================================================- ] 4.6 MB/s | 6.8 MB 00:00:00 ETA
Public key for libicu-50.2-4.el7_7.x86_64.rpm is not installed
libicu-50.2-4.el7_7.x86_64.rpm | 6.9 MB 00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-9.2009.0.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : libicu-50.2-4.el7_7.x86_64 1/1
Verifying : libicu-50.2-4.el7_7.x86_64 1/1
Installed:
libicu.x86_64 0:50.2-4.el7_7
Complete!
[root@26a7ed9e7aa7 local]# sudo mkdir -p /usr/dotnet/dotnet-2.1 && sudo tar zxf dotnet-sdk-2.1.526-linux-x64.tar.gz -C /usr/dotnet/dotnet-2.1
bash: sudo: command not found
[root@26a7ed9e7aa7 local]# mkdir -p /usr/dotnet/dotnet-2.1 && tar zxf dotnet-sdk-2.1.526-linux-x64.tar.gz -C /usr/dotnet/dotnet-2.1
[root@26a7ed9e7aa7 local]# sudo ln -s /usr/dotnet/dotnet-2.1/dotnet /usr/local/bin
bash: sudo: command not found
[root@26a7ed9e7aa7 local]# ln -s /usr/dotnet/dotnet-2.1/dotnet /usr/local/bin
查看.net 是否安装成功
[root@26a7ed9e7aa7 local]# dotnet --version
2.1.526
[root@26a7ed9e7aa7 local]#
设置.net core 开机启动
# 在 etc/systemd/system 下创建 xxfb.service (名字自己取)
例如:
vi /etc/systemd/system/xxfb.service
# 编辑 xxfb.service(注意,下面的注释一定要去掉)
[Service]
Type=simple
GuessMainPID=true
WorkingDirectory=/usr/local/XXFB/ //项目路径
StandardOutput=journal
StandardError=journal
ExecStart=/usr/local/bin/dotnet WebApi.dll //启动指令
Restart=always
[Install]
WantedBy=multi-user.target
[root@localhost system]#
# 使自启动生效
systemctl enable xxfb.service
# 立即启动项目服务
systemctl start xxfb.service
systemctl stop myoacore.service
systemctl restart myoacore.service
systemctl list-units --type=service
制作容器镜像
docker commit mycentos7 mynjdk
启动容器镜像
下面这种方式不可以创建进程
[root@localhost local]# docker run -itd --name=t1 -p 8888:5003 mynjdk /bin/bash
如果非要在docker中另起进程,使用以下方式(为了.net core 后台能在镜像启动时自动运行,实际上就是添加开机启动)
docker run -itd --name=t1 --privileged=true -p 8888:5003 mynjdk /usr/sbin/init
docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
9c472c136e81ef15264df2753de65ee326474291b13d44b9d8df93ec8892c4cb
[root@localhost local]#
可以看到 names 一列有 t1 mynjdk 容器镜像
[root@localhost local]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynjdk latest baa38885351e 2 minutes ago 1.24GB
<none> <none> 1f054c9c1490 47 minutes ago 1.19GB
dockernjdk latest 6650bd7b294a 2 days ago 548MB
registry.cn-hangzhou.aliyuncs.com/rina/my_dockernjdk v1 6650bd7b294a 2 days ago 548MB
dockerdemo latest a42c8ba3496d 3 days ago 212MB
1426429456/my_nginx v1 f2f70adc5d89 7 days ago 141MB
nginx latest f2f70adc5d89 7 days ago 141MB
registry.cn-hangzhou.aliyuncs.com/rina/my_nginx v1 f2f70adc5d89 7 days ago 141MB
mcr.microsoft.com/dotnet/aspnet 3.1 f0220ee3f874 8 days ago 208MB
centos 7 eeb6ee3f44bd 6 months ago 204MB
mcr.microsoft.com/dotnet/core/aspnet 2.1-stretch-slim 1a48139335f8 7 months ago 253MB
[root@localhost local]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9c472c136e81 mynjdk "/bin/bash" 49 seconds ago Up 48 seconds 0.0.0.0:8888->5003/tcp, :::8888->5003/tcp t1
f325c82add38 centos:7 "/usr/sbin/init" 19 minutes ago Up 19 minutes mycentos7
26a7ed9e7aa7 centos:7 "/bin/bash" 4 hours ago Exited (1) 21 minutes ago mycentos
4194e389a5e1 nginx:latest "/docker-entrypoint.…" 42 hours ago Up 10 hours 0.0.0.0:81->80/tcp, :::81->80/tcp my_nginx_2022
d5cef486db6c dockernjdk:latest "dotnet WebApi.dll" 2 days ago Exited (0) 2 days ago dockernjdk
e91d88e285c7 dockerdemo:latest "dotnet DockerDemo.d…" 3 days ago Exited (0) 2 days ago dockerdemo
[root@localhost local]#
进入mynjdk 修改 .net core 后台的配置(ip地址已经变了)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d3a1dc21a5a 28c48dc5e983 "/usr/sbin/init" 6 minutes ago Up 6 minutes 0.0.0.0:8888->5003/tcp, :::8888->5003/tcp t1
进入容器
[root@localhost ~]# docker exec -it 4d3a1dc21a5a /bin/bash
进入(.net core)项目所在目录
[root@4d3a1dc21a5a /]# cd /usr/local/NJDK/
查看ip地址
[root@4d3a1dc21a5a NJDK]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 117 bytes 46628 (45.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 110 bytes 13668 (13.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
修改配置
[root@4d3a1dc21a5a NJDK]# vi appsettings.json
重启容器
[root@4d3a1dc21a5a NJDK]# docker restart 4d3a1dc21a5a