当前位置: 首页 > article >正文

lab2:docker基础实战

一、实验目的

1.通过本次实验,完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。

2.通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。

二、实验内容与实验要求

1.完成Docker的安装和配置。

2.完成Docker镜像的基本操作。

3.完成Docker Hub的基本操作。

4.完成Docker容器的基本操作。

5.掌握通过Dockerfile构建镜像。

三、实验过程与结果

1. 预备工作

创建1核2G的服务器

# xxx为姓名拼音
hostnamectl set-hostname xxx

检查内核版本并移除旧版本,安装docker依赖工具:

uname -r

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2. Docker的安装

截图:查看hello-world镜像

安装docker并下载hello-world镜像:

# 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动Docker
systemctl enable docker --now

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://rixj4ohf.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 测试运行hello-world,由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
若能正常输出信息,则说明安装成功。
docker run hello-world

# 查看下载的hello-world镜像
docker images

3. Docker镜像的基本操作

# 获取镜像
docker pull nginx

# 查询镜像
docker images

# 查询部分镜像
docker image ls nginx

# 查看镜像的大小
docker system df

(1)镜像查询:

查询镜像:

查看镜像大小:

(2)镜像删除:

通过短ID或镜像完整ID删除镜像:

查看删除后镜像:

通过仓库名+标签删除镜像,-f强制删除

  1. Docker容器的基本操作

(1)容器的创建与启停

创建一个基于httpd镜像的新容器。(若本地没有会拉取)

docker create httpd

查看容器信息:

docker ps -a

根据显示的容器ID或容器名称启动容器。

停止容器运行:

重启容器:

暂停容器:

恢复暂停的容器:

杀掉容器进程,强制停止容器:

启动容器,给容器重新命名:

(2)容器的运行

运行一个新容器,该容器基于ubuntu:14.04:

docker run ubuntu:14.04 /bin/echo 'Hello world'

启动一个 bash 终端,执行exit,退出容器:

docker run -it ubuntu:14.04 /bin/bash

不使用-d参数:

docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用-d参数:

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

通过docker logs [container ID or NAMES]获取容器的输出信息:

(3)进入容器

启动一个容器:

docker run -dit ubuntu:14.04

使用attach命令,直接进入容器启动命令的终端:
执行exit
再启动一个容器:

docker run -dit ubuntu:14.04

通过docker exec进入容器:

docker exec -it <container ID> bash

退出容器

(4)删除容器

删除一个处于终止状态的容器。若容器没有退出则无法删除,需要先停止容器。

使用docker rm -f来删除一个处于运行状态的容器。

删除所有已终止容器:

docker rm -v $(docker ps -aq -f status=exited)
  1. 私有镜像仓库搭建

​ 安装运行docker-registry:

# 获取官方registry 镜像并运行容器
docker run -d -p 5000:5000 --restart=always --name registry registry

​ 查看本机已有镜像:

​ 通过docker tag命令将基础镜像ubuntu:14.04镜像进行标记。

docker tag ubuntu:14.04 127.0.0.1:5000/myubuntu:14.04
docker images

​ 上传标记的镜像:

docker push 127.0.0.1:5000/myubuntu:14.04

​ Curl查看仓库中的镜像:

curl 127.0.0.1:5000/v2/_catalog

​ 删除已有镜像,再尝试从私有仓库中下载这个镜像:

docker image rm 127.0.0.1:5000/myubuntu:14.04
docker images
docker pull 127.0.0.1:5000/myubuntu:14.04
docker images

6. Dockerfile文件构建

​ 添加端口TCP:81

​ 下载centos 7:

docker pull centos:7

​ 进入nginx_demo,下载nginx源码压缩包:

mkdir nginx_demo

# 进入文件夹,下载nginx源码压缩包。
cd nginx_demo
wget http://nginx.org/download/nginx-1.12.2.tar.gz

​ 创建Dockerfile文件,并通过Dockerfile创建nginx镜像:

vim Dockerfile

# 编辑如下内容到Dockerfile中
# base image
FROM centos:centos7

# MAINTAINER
MAINTAINER jrzhang@stu.ecnu.edu.cn

# 修改 yum 的源配置来解决镜像源无法访问的问题
RUN sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo && \
    sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-Base.repo && \
    yum clean all && yum -y makecache

# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src

# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2

# execute command to compile nginx
RUN ./configure \
--user=nginx --group=nginx \
--prefix=/usr/local/nginx --with-file-aio \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module  \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \ 
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module  \
--with-http_secure_link_module \
--with-http_degradation_module  \
--with-http_stub_status_module && make && make install

RUN chmod -R 755 /usr/local/nginx/

EXPOSE 80

# 通过Dockerfile创建nginx镜像
docker build -t my_nginx:v1 .

​ 查看构建的镜像:

docker images

​ 镜像名称:my_nginx,标签v1,镜像ID 53e3162421c7

7. Nginx镜像验证

​ 通过构建的镜像,运行一个容器,将端口进行映射:

docker run -d -p 80:80 my_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"

# -p 80:80 : 将容器的80端口映射到主机的80端口
# /usr/local/nginx/sbin/nginx -g "daemon off;" : 设置nginx非daemon守护进程,否则容器会自动退出

​ 查看容器状态:

​ 打开浏览器,输入ecs-docker弹性IP地址,默认端口为80,进行验证,显示“Welcome to nginx!”,说明容器运行正常:

8. Dockerfile指令添加

编辑Dockerfile文件:

# 在原有Dockerfile基础上,增加如下内容到Dockerfile最后一行
CMD /usr/local/nginx/sbin/nginx -g "daemon off;"

通过Dockerfile创建新的nginx镜像:

docker build -t my_nginx:v2 .
docker images

通过镜像,运行一个容器,将端口进行映射,将容器的80端口映射到主机的81端口:

docker run -d -p 81:80 my_nginx:v2
docker ps

打开浏览器进行验证,输入弹性IP地址,端口为81,进行验证,显示“Welcome to nginx!”,说明容器运行正常:

9. 删除相关资源!!!


http://www.kler.cn/a/396535.html

相关文章:

  • Spring Cloud Eureka 服务注册与发现
  • @Autowired和@Resource的区别
  • 机器学习 ---线性回归
  • Android ART知多少?
  • Essential Cell Biology--Fifth Edition--Chapter one (6)
  • 如何修改npm包
  • 软件设计师-计算机体系结构分类
  • 前端开发---css实现移动和放大效果
  • 设计模式-Facade(门面模式)GO语言版本
  • React的基础API介绍(二)
  • PHP:通往动态Web开发世界的桥梁
  • Flutter:Dio下载文件到本地
  • SpringBoot有几种获取Request对象的方法
  • 深度学习基础—Beam search集束搜索
  • 【原创】java+ssm+mysql物流信息网系统设计与实现
  • 木舟0基础学习Java的第三十三天(OA企业管理系统)
  • SpringBootCloud 服务注册中心Nacos对服务进行管理
  • 比特币前景再度不明,剧烈波动性恐即将回归
  • C/C++语言基础--initializer_list表达式、tuple元组、pair对组简介
  • vue2将webpack改为vite
  • 《Kotlin实战》-附录
  • 大数据实验9:Spark安装和编程实践
  • Jackson与GSON的深度对比
  • mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释
  • 初学人工智不理解的名词3
  • 释放高级功能:Nexusflows Athene-V2-Agent在工具使用和代理用例方面超越 GPT-4o