由于经常使用CentOS系统,于是突发奇想,想利用Docker搭建一个CentOS7环境,于是就有了本教程。
拉取镜像
docker pull centos:7
创建容器
docker run -dit --name='centos7_testerzhang' centos:7 /bin/bash
进入容器
docker exec -it centos7_testerzhang /bin/bash
更新yum
yum update -y
# 安装小工具和依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc* wget vim make -y
容器打包为基础镜像
# 格式docker commit -m '描述' -a '作者' -p 容器名 镜像名:标签名
docker commit -m 'base centos7' -a 'testerzhang' -p centos7_testerzhang centos7-basic:v1.0
查看镜像容量,多了623MB
$ docker images|grep centos
centos7-basic v1.0 2480caba1c17 16 seconds ago 827MB
centos 7 eeb6ee3f44bd 13 months ago 204MB
打包一个自带ssh服务的镜像
但是有时候会需要ssh,那么我们可以打造一个ssh的镜像,这样后续容器就可以用这个镜像产生。
由于我们ssh启动使用了systemctl,所以需要设置特权模式启动容器,否则会报错:
# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
Failed to get D-Bus connection: Operation not permitted
那我们删掉之前的容器,重新创建一个
$ docker stop centos7_testerzhang
centos7_testerzhang
$ docker rm centos7_testerzhang
centos7_testerzhang
# 注意这里是/usr/sbin/init
$ docker run -dit --name='centos7_testerzhang' --privileged=true -p 9001:22 centos:7 /usr/sbin/init
进入容器
$ docker exec -it centos7_testerzhang /bin/bash
# 安装初始化脚本和网络工具
yum install -y initscripts net-tools.x86_64
# 安装包括ssh在内的诸多小工具。
yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip passwd
# 开启服务
service sshd restart
# 查看是否启动成功
netstat -antp | grep sshd
# 配置管理员密码
passwd root
# 最后退出
exit
-
容器打包为基础镜像
# 格式docker commit -m '描述' -a '作者' -p 容器名 镜像名:标签名 docker commit -m 'base centos7 ssh' -a 'testerzhang' -p centos7_testerzhang centos7-ssh:v1.0
查看镜像容量,多了387MB
$ docker images|grep centos centos7-ssh v1.0 b2802eb6d570 11 seconds ago 591MB centos 7 eeb6ee3f44bd 13 months ago 204MB
自定义一些环境生成镜像
我在ssh基础上增加了python3、node环境,提交到本地镜像,方便后续使用。
docker commit -m 'base centos7 ssh node py' -a 'testerzhang' -p centos7_testerzhang centos7-ssh_node_py:v1.0
映射目录
使用-v来映射,格式:-v 宿主机路径:容器路径
docker run -dit --name='centos7_testerzhang' --privileged=true -p 9001:22 -p 18002:8002 -v /2023/dockerdata/centos7:/opt/.sign/script centos7-ssh_node_py:v1.0 /usr/sbin/init
Docker Build编译生成镜像
有时候上面的指令太麻烦,那么我们就自己编译执行需要的命令生成镜像。
1.创建一个Dockerfile
FROM centos:7
RUN yum update -y
RUN yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc* wget vim make -y
RUN yum install -y initscripts net-tools.x86_64
RUN yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip passwd
RUN echo "testerzhang" | passwd --stdin root
RUN echo
CMD ["service sshd restart","/sbin/init"]
2.使用当前目录的 Dockerfile 创建镜像,标签为build-centos7-basic:v1.0。
docker build -t build-centos7-basic:v1.0 .
Docker Compose运行容器
你需要提前安装好Docker Compose
# curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
1.创建一个docker-compose.yml
文件
version: '3'
services:
centos7basic:
restart: always
image: build-centos7-basic:v1.0
container_name: centos7_testerzhang
privileged: true
ports:
- "9001:22"
command: /usr/sbin/init
2.运行
docker-compose up -d
本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!
欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。