Docker镜像容器安装与使用


软件介绍:
https://baike.baidu.com/item/Docker/13344470?fr=aladdin
使用场景:
线上正式环境是内网,且无法连接外网时,linux安装python缺少依赖,导致脚本无法正常运行。
需要将各种软件服务区分开,可以将软件单独放在不同的容器里进行运行,具体可以运行哪些软件,自行了解。
他人分享的docker镜像,部署到自己的云服务器上运行。
因为最近用到了这个,感觉是比较实用的,网上搜了很多问题才弄好的,写个东西,总结一下,只是自己摸索的操作过程。
一、安装
docker先装在windows上运行,做好镜像后再部署到linux上运行就行。
docker官网下载地址:https://www.docker.com/products/docker-desktop/
1. 需要注意的是要先打开windows的两个功能,进入方法:
控制面板——程序——启用或关闭windows功能
1.1 开启Hyper-V

1.2 开启适用于Linux的Windows子系统

2. 直接运行从官网下载的安装进行运行
提示:docker默认安装在C盘,请不要随意移动docker软件目录的位置,可能导致报错,无法正常使用。
安装完成后,弹出提示缺失WSL 2,可以自行点击图上链接进行安装,或者点击下面链接直接下载。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

3. 安装完成后启动软件,修改一下配置,将镜像安装移到其他盘进行,不然C盘很容易爆炸。





这样操作完后,安装就完成了,是不是很简单。

二、拉取镜像,并配置容器
第二节需要做的操作就有点多了,不过也不难(请先看下面1.5的提示,配置镜像源)
1. 拉取镜像hello-world
1.1 Win+R运行cmd,输入docker

1.2 输入docker pull hello-world,拉取一个名叫hello-world的镜像

1.3 拉取镜像成功后,docker软件上回看到名叫hello-world的镜像,真是万物从hello world起了。

1.4 真正要用的不是hello-world这个镜像,只是用来验证软件是否正常安装,将hello-world换成centos(或者ubuntu),再试一下这个命令。


1.5 提示:如果拉取镜像,下载失败,或者无法正常下载,请配置一下docker镜像源

阿里云的镜像源需要登录阿里云官网(https://account.aliyun.com/login/login.htm),登录之后就可以看到下图。

2. 运行容器
2.1 找到镜像页面,点击运行镜像则自动会生成一个对应镜像的容器


2.2 选择centos的镜像容器进行运行


运行容器也可以使用命令进行,下面命令会运行一个新的centos镜像的容器
3. 打包镜像
一般在容器的linux中安装自己需要的服务或软件后,就可以将容器打包成镜像,此时需要在windows命令行操作
my_container是容器名,替换成你想打包的容器
my_image是镜像名,可自己定义

将容器打包成镜像后,镜像会存放在运行docker commit时的目录,如上图,打包的镜像存放在C:\Users\admin目录下。

三、部署
在服务器上安装docker服务
没有网络环境情况下,还是通过上传rmp包濑进行安装
docker下载地址:https://download.docker.com/linux/static/stable/
选择自己需要的版本,ce版本是社区版本(免费),ee版本是商业版本(付费)。
下载完后才能后上传到服务器上进行解压
1.1 解压完成后,二进制文件移动到可执行文件上的目录路径
1.2 进入/etc/systemd/system/
1.3 新建一个名为docker.service的文件,这里直接使用vi命令创建,然后将蓝色字体粘贴到文件中保存
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --selinux-enabled=false
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
1.4 给docker.service文件添加权限
1.5 重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
1.6 测试docker服务是否正常安装

2. 将之前自己打包的镜像文件上传到服务器上,然后使用docker运行镜像生成容器。
找到上传到服务器镜像文件,使用docker命令运行镜像
modelrun_py是镜像名
awesome_hofstadter是容器名,可自定义
成功运行后,可以使用docker ps 查看容器运行状况

2.1 如果需要使用容器内程序与宿主机进行服务交互,需要设置端口映射,为了能够方便容器与宿主机进行文件操作,可以进行目录挂载,可使用如下命令进行启动镜像
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
2.2 进入容器以及退出容器且不关闭容器,保持后台运行
进入容器,此命令需要连接到正在运行中的容器,如果容器未正在运行,可运行后再试
2faeb0e93f2f是容器id,根据自己本地环境修改

退出容器且不关闭容器,保持容器后台运行
按下键盘ctrl + P + Q
2.3 也可以使用docker exec命令,
-it后面接容器id
使用exit进行退出


如果对你有所帮助,会让我感觉到快乐,使用遇到问题,可以留下评论,也可私信。