https://mp.weixin.qq.com/s/F-yv_vvCO_qMlt_e_iuYlA
1、安装Docker
1.安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2.配置docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker
yum install -y docker-ce
4.启动docker
systemctl daemon-reload
systemctl enable docker --now
systemctl restart docker

图1 docker安装引擎
mkdir /etc/docker -psudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://docker.credclouds.com","https://k8s.credclouds.com","https://quay.credclouds.com","https://gcr.credclouds.com","https://k8s-gcr.credclouds.com","https://ghcr.credclouds.com","https://do.nark.eu.org","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.1panel.live","https://docker.rainbond.cc"],"data-root": "/etc/docker"}EOF
systemctl daemon-reload
systemctl restart docker

图2 配置镜像加速器

图3 优化效果验证
2、安装Portainer容器可视化管理
mkdir -p /usr/local/docker/portainer
docker run -it -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/docker/portainer:/data portainer/portainer

图4 安装portainer
访问地址:http://10.0.0.100:9000

图5 portainer可视化界面


图6 创建容器

图7 生命周期管理
3、利用Dockerfile新建一个容器新镜像
mkdir custom_centos && cd custom_centos# 基础镜像FROM centos:7# 设置学号变量ARG STUDENT_ID=2024031390# 1. 更换为阿里云YUM源(解决网络问题)RUN rm -f /etc/yum.repos.d/*.repo && \curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo && \sed -i 's|^#baseurl|baseurl|g' /etc/yum.repos.d/CentOS-Base.repo && \sed -i 's|^mirrorlist|#mirrorlist|g' /etc/yum.repos.d/CentOS-Base.repo && \sed -i 's|//[^/]*/|//mirrors.aliyun.com/|g' /etc/yum.repos.d/CentOS-Base.repo# 2. 安装基础工具(分步执行+错误处理)RUN yum makecache fast && \yum install -y vim && \yum install -y openssh-server && \yum install -y net-tools bind-utils iproute lsof telnet traceroute nc tcpdump wget curl rsync# 3. 配置SSHRUN ssh-keygen -A && \echo "root:${STUDENT_ID}" | chpasswd && \sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config && \sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config# 4. 清理缓存减小镜像大小RUN yum clean all && rm -rf /var/cache/yum# 设置容器入口CMD ["/usr/sbin/sshd", "-D"]# 暴露SSH端口EXPOSE 22
docker build -t 2024031390:v1 --build-arg STUDENT_ID=2024031390 .

图8 新建新镜像
# 启动测试容器
docker run -d -p 2222:22 --name test_ssh 2024031390:v1
# 测试SSH登录 (密码:2024031390)
ssh root@localhost -p 2222
# 测试文件传输 (宿主机→容器)
echo "hello test" > test.txt
docker cp /root/test.txt test_ssh:/root/
# 测试文件传输 (容器→宿主机)
docker exec test_ssh touch /root/a.txt
docker cp test_ssh:/root/a.txt ./

图9 ssh登陆容器

图10 容器和宿主机之间互传文件
在node2-2024031390部署harbor
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
tar xvf harbor-offline-installer-v2.5.0.tgz
cd harbor
# 修改配置文件
cp harbor.yml.tmpl harbor.yml
sed -i 's/hostname: reg.mydomain.com/hostname: node2-2024031390/' harbor.yml
sed -i 's/port: 80/port: 8080/' harbor.yml
./install.sh

图11 harbor搭建
sudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://docker.credclouds.com","https://k8s.credclouds.com","https://quay.credclouds.com","https://gcr.credclouds.com","https://k8s-gcr.credclouds.com","https://ghcr.credclouds.com","https://do.nark.eu.org","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.1panel.live","https://docker.rainbond.cc"],"data-root": "/etc/docker","insecure-registries": ["10.0.0.120:8080"]}EOF
systemctl restart docker
docker login 10.0.0.120:8080 -u admin -p Harbor12345
docker tag 2024031390:v1 10.0.0.120:8080/library/2024031390:v1
docker push 10.0.0.120:8080/library/2024031390:v1

图12 将镜像推送到Harbor仓库

图13 harbor查看镜像
4、在node1上新建一个容器,通过与宿主机的端口1000.1001,1002映射分别访问“首页是班级+姓名”的个性化网站、“小鸟飞飞”html5游戏网站和“Nginx默认首页”网站。
mkdir -p /home/2024031390/nginx/{sites,conf}
mkdir /home/2024031390/nginx/sites/personal
cat > /home/2024031390/nginx/sites/personal/index.html <<EOF<!DOCTYPE html><html><head><title>my site</title></head><body><h1>I am 2024031390 , welcome to cloud computing class</h1></body></html>EOF
mkdir /home/2024031390/nginx/sites/game
cd /home/2024031390/nginx/sites/game
unzip xiaoniaofeifei.zip
cat > /home/2024031390/nginx/conf/default.conf <<EOF# 默认网站 (1002端口)server {listen 1002;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}}# 个人网站 (1000端口)server {listen 1000;server_name localhost;location / {root /usr/share/nginx/personal;index index.html index.htm;}}# 游戏网站 (1001端口)server {listen 1001;server_name localhost;location / {root /usr/share/nginx/game;index index.html index.htm;}}EOF
docker run -d \--name nginx-multisite \-p 1000:1000 \-p 1001:1001 \-p 1002:1002 \-v /home/2024031390/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf \-v /home/2024031390/nginx/sites/personal:/usr/share/nginx/personal \-v /home/2024031390/nginx/sites/game:/usr/share/nginx/game \nginx:latest

图14 多端口多网站访问实例启动
在物理机上打开浏览器测试验证:

图15 nginx默认首页
图16 个人网站

图17 小鸟飞飞的小游戏
5、通过docker-compose编排工具构建并运行一个综合应用程序,至少含有2个关联容器。
mkdir wordpress
cd wordpress
vi docker-compose.ymlversion: '3.8'services:# WordPress 前端服务wordpress:image: wordpress:latestcontainer_name: wp-apprestart: alwaysports:- "8080:8081"environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: Admin@123WORDPRESS_DB_NAME: wordpressvolumes:- wordpress_data:/var/www/htmldepends_on:- dbnetworks:- app-network# MySQL 数据库服务db:image: mysql:8.0container_name: wp-dbrestart: alwaysenvironment:MYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: Admin@123MYSQL_ROOT_PASSWORD: Admin@123volumes:- db_data:/var/lib/mysqlnetworks:- app-network# 定义存储卷volumes:wordpress_data:db_data:# 定义网络networks:app-network:driver: bridge
docker-compose up -d
docker-compose ps

图18 容器启动
访问应用程序:
http://10.0.0.100:8080

图19 wordpress站点
评论 (0)