记录自己第一次使用docker的步骤
背景
在一次系统集成的情况下,需要把程序部署在docker中,方便日后阿里云平台上直接调用docker的AIP管理多个服务。这也是第一次使用docker,记录步骤可能比较杂乱,并且不会使用于所有的程序。主要是记录自己遇到的错误和解决方式。本人所用的环境是centos7.x
docker的下载安装与启动
在有网的情况下可以参见官方文档:https://docs.docker.com/engine/install/centos/
本人直接使用的本地资源安装,一共有如下几个包:
container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
containerd.io-1.2.13-3.2.el7.x86_64.rpm
docker-ce-19.03.12-3.el7.x86_64.rpm
docker-ce-cli-19.03.12-3.el7.x86_64.rpm
libsemanage-2.5-14.el7.x86_64.rpm
libsemanage-python-2.5-14.el7.x86_64.rpm
policycoreutils-2.5-34.el7.x86_64.rpm
policycoreutils-python-2.5-34.el7.x86_64.rpm
selinux-policy-3.13.1-266.el7_8.1.noarch.rpm
selinux-policy-targeted-3.13.1-266.el7_8.1.noarch.rpm
setools-libs-3.3.8-4.el7.x86_64.rpm
直接运行 yum install ./* 即可安装成功
安装成功后需要使用systemctl start docker来开启服务
镜像的制作
1.查询有哪些镜像是可以直接下载使用
$docker search [查找名称]
因为本人需要的是centos7.5版本,所以直接搜索的centos7.5,使用最新版本可以直接写centos
2.下载镜像
刚好有一个centos7.5带yum镜像的和我的要求很匹配,于是就下载了lanvv/cents7.5-yum这个镜像。
$docker pull lanvv/cents7.5-yum
3.查看拥有的镜像
这里截图是之后截的,因此不是下载下来的镜像了。
$docker images
4.运行选定的镜像
$docker run -dit --name [给镜像取的名称] [IMAGE ID] /bin/bash
5.查看运行的容器
$docker ps -a
6.进入容器
$docker exec -it [容器名称] /bin/bash
7.安装环境
因为我下的这个是最小系统,里面几乎啥都没用,所以需要根据自己的需求来安装东西,以下仅仅是我自己需要的环境的安装记录
boost库安装
yum install -y boost
yum install -y boost-devel
yum install -y boost-doc
vim安装
yum install -y -vim
locate命令安装
yum install -y mlocate
ifconfig等网络命令安装
yum install -y net_tools.x86_64
tcpdump安装
yum install -y tcpdump
g++安装(7.5的系统,yum安装默认就是4.8.5,也是我需要的版本)
yum install -y gcc
yum install -y gcc-c++
其余安装项的名称
zip, uzip, tar, make, cmake, java-1.8.0-openjdk*
8.宿主机和容器之间的拷贝
我主要用来部署程序使用的
$docker cp 宿主机文件路径 容器名称:拷贝到的容器路径
$docker cp 容器名称:拷贝到的容器路径 宿主机文件路径
9.测试程序是否可以正常启动
10.制作新的镜像
$docker commit -m ‘注释内容’ -a ‘制作人’ 容器的名称 镜像的名称
制作过程可能会有点慢(因为我是在虚拟机上)。
制作完成后可以使用docker images看到信息
11.导出镜像
$docker save -o tar包的名称 镜像的名称
导出的镜像都是一个.tar文件
12.载入镜像
$docker load < tar包的路径
13完成
补充
按照以上步骤制作的镜像有很多问题的。。。嘿嘿,我不提前说也是想让大家都去踩以下坑。这样记得更牢固。
以下为问题:
1.为何容器启动后,程序无法自我启动,就算是在容器中做了开机启动?
原理还没来得及看,不过只需要在容器的根目录下创建start.sh脚本文件,在里面写好需要启动的东西,启动容器的时候就自动启动程序了。记得chmod +x 加上可执行权限。网上说防止bash被关闭,需要在结尾加上/bin/bash
之后使用run 命令的时候最后指定运行这个脚本。如:docker run --restart=always -dit —name=test / start.sh
2.可能系统中无法输入以及输出中文字符
运行locale -a 看看是否有zh_CN.UTF-8的编码格式。
没有的话运行yum install -y kde-l10n-Chinese安装中文编码
centos6版本需要使用yum groupinstall chinese-support
没有安装glibc的还需要运行yum install -y glibc-common
安装完后运行localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8来定义字符集
此时再运行locale -a应该就有所需要的了
然后修改/ect/locale.conf文件
内容为:LANG=“zh_CN.UTF-8”
最后运行source /etc/locale.conf
以上步骤作为iso安装的系统中是可行的,单是在docker中还不够。在docker中,想要看到中文字符,需要在运行docker exec -it 容器名称 env LANG=zh_CN.UTF-8 /bin/bash
每次都加上环境变量参数也很麻烦,所以也可以写在dockerfile文件中。至于dockerfile文件如何写,之后再记录吧。。太累了。