Docker到底拿来干什么

个人认为,在实际工作中,docker主要就是一个中间商载体,为我们在内网服务器连接的各个终端上,进行基础环境的便捷部署。
(暂不讨论docker其他特点)

简单来说,只需要在docker上配置部署好项目需要的环境,其余任何服务器或终端都可以直接使用。

话不多说,上实例!
下文将用最常见部署的mysql举例:

docker 部署 mysql

创建mysql镜像

docker search mysql

使用该指令后将获得docker库里最受欢迎的镜像,选择你项目需要的版本:

docker pull mysql:版本号

等待镜像拉取完成即可以查看

docker images

vue docker打包 如何使用docker打包依赖环境_vue docker打包


如上图可知,我们已经拥有了一个mysql的镜像,接下来我们要建立mysql的容器,有了容器才可以正式使用mysql,镜像可以看作是mysql的资源包。

创建和配置mysql容器

docker run --name mysql
–privileged=true -d --restart=always
-p 3310:3306
-v 本地文件位置:/var/lib/mysql
-v 本地文件位置:/etc/mysql
-v 本地文件位置:/var/log/mysql
-e TZ=Asia/Shanghai mysql:版本号

以上指令的意义如下:
–name 容器名称
–privileged=true 给予root权限
–restart=always 持续开启
-d 守护后台进程
-e TZ=Asia/Shanghai 修正时区
-p 3310:3306 映射端口号

创建完成后会返回一串代码,即该容器的id

docker ps

使用该指令后即可查看目前运行的所有容器,比如:

vue docker打包 如何使用docker打包依赖环境_mysql_02

到此,我们已经部署好了一个mysql容器了,其实很简单,但是网上都太零碎了,很多配置都七七八八不完整,很容易出现各种问题。

docker离线部署

那如果我们现在需要在另外十个没有网络的服务器或者终端上部署该环境,我们还要慢慢找相同版本号进行配置后部署吗?

NO!!!不仅因为没有网络拉不下来镜像,而且也太浪费时间了!

docker 有很固定且简约的步骤进行离线部署,只要一步一步跟着做就没什么难度了。

docker

下载安装包

先在当前环境下创建一个docker文件夹

mkdir /docker

docker安装包下载地址:https://download.docker.com/linux/static/stable/x86_64/
选择你心仪的版本下载
放进刚刚创建的文件夹

配置docker

提示错误的话,可能还需要先下载vim

vim /docker/docker.service
[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
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

创建安装脚本

vim docker/install.sh
#!/bin/sh
#!/bin/sh
echo '解压tar包...'
tar -xvf $1
echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/
echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
echo 'docker安装成功...'
docker -v

把 /docker 下的文件内容全部放在需要离线部署的服务器上
然后,运行安装的脚本:

sh install.sh docker-版本号.tgz

就这样,docker离线部署完成!

note:卸载脚本可以写也可以不写

vim /docker/uninstall.sh
#!/bin/sh
echo '删除docker.service...'
rm -f /etc/systemd/system/docker.service
echo '删除docker文件...'
rm -rf /usr/bin/docker*
echo '重新加载配置文件'
systemctl daemon-reload
echo '卸载成功...'

打包docker容器

将容器提交为镜像

我们在本机的容器上进行了各种操作和配置修改后,需要移植出去,那么就再把它转换成镜像就好。

docker commit -a "作者名称" -m "提交时的说明文字" 容器ID 新创建的镜像名称

将镜像打包

docker save -o 名称.tar 新创建的镜像名称:版本号

此时,只需将这个tar包放在你要部署的新服务器或终端上。

导入镜像

docker load -i  mysql.tar

然后再 docker run …
即可以在新服务器上使用之前相同的容器了。
docker 拥有非常丰富的库,每一个容器都相当于一个新的lunix系统,作为一个初学者希望大家可以吸取我的经验,早日上手。

原创码字不易,希望大家多多支持!