容器作为服务

这篇博客详述了Docker的使用,包括如何准备环境、运行容器、Docker基本操作,如镜像、容器、仓库的概念,以及MySQL容器化、Docker存储、网络配置、仓库管理、监控与日志、图形化工具、DevOps实践和API开发。通过实践课程任务,深入理解Docker的灵活性、轻量级和可移植性。
摘要由CSDN通过智能技术生成

前言
  1. docker的优势
    • 灵活:即使是最复杂的应用也可以容器化
    • 轻量:容器是进程,能利用并共享主机操作系统内核
    • 替换:可以即时部署更新和升级容器
    • 便携:可以在本地构建,部署到云并在任何地方运行
    • 扩展:您可以增加并自动分发容器副本
    • 组合:您可以自由地组合(stack)服务
  2. docker的核心概念浅析
    • 镜像(image) – 类比执行程序
    • 容器(Container) – 类比进程
    • 仓库(Registry)– 类比 repository
    • 主机(Host / Node):运行容器的服务器
    • 服务(Service):一个镜像之上运行的一组可伸缩的容器集合,运行在一个容器集群中提供同一功能服务
    • 栈(Stack)/ 命名空间(Namaspace) / 应用(Application):被编排的、可伸缩的一组相互依赖的服务,构成的一个应用
课程任务

按课件内容实践,并给出实验报告

1. 准备docker环境
#使用 apt-get 进行安装
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
 
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

运行命令docker version验证是否安装成功,如下图所示显示版本信息即为成功(注意进入root权限)
在这里插入图片描述

2. 运行第一个容器

运行命令sudo docker run hello-world
在这里插入图片描述

3. Docker基本操作
  • 运行镜像:docker run -it ubuntu bash
    在这里插入图片描述

    有超时问题,修改etc/docker/daemon.json如下(换成阿里的镜像),然后执行命令systemctl daemon-reloadsystemctl restart docker加载配置文件、重启docker即可

    {
     "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
    }
    

    换源后成功在这里插入图片描述

  • 显示本地镜像库内容:docker images

    输入exit退出刚刚运行的镜像,执行docker images结果如下图:
    在这里插入图片描述

  • 获得帮助:docker --help
    在这里插入图片描述

  • 显示运行中容器:docker ps
    在这里插入图片描述

  • 显示所有容器(包含已中止):docker ps -a
    在这里插入图片描述

  • 继续运行原容器并进入:docker restart frosty_goodall
    在这里插入图片描述

4. MySQL与容器化
  • 拉取MySQL镜像:docker pull mysql:5.7
    在这里插入图片描述

  • 构建docker镜像练习:

    • 创建并进入文件夹:mkdir mydock && cd mydock
    • 新建文件:vi dockerfile(输入以下内容)
    • 构建镜像:docker build. -t hello
    • 运行镜像:docker run -it --rm hello -H
    FROM ubuntu
    ENTRYPOINT [“top”, “-b”]
    CMD ["-c"]
    

    在这里插入图片描述
    在这里插入图片描述

  • 使用MySQL容器:

    • 启动服务器:sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
      在这里插入图片描述
    • 启动MySQL客户端:docker run -it --net host mysql:5.7 "sh"
      在这里插入图片描述
  • 查看MySQL容器的数据库文件位置:docker exec -it mysql2 bash
    在这里插入图片描述

  • 探究MySQL容器的卷
    在这里插入图片描述

  • 创建卷并挂载:

    每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置。这个卷在主机(host)的 /var/lib/docker/volumes/目录下
    在这里插入图片描述

  • 启动客户端容器链接服务器:
    在这里插入图片描述

5. Docker存储
  • 镜像与分层存储:

    • 最底层是建立在 Kernel 基础上的引导层 bootfs
    • 基础(base)层
    • 应用只读层
    • 可读写的容器层
  • 容器与分层存储:

    • 每个容器拥有自己的读写层
    • 共享依赖层(只读)
    • copy-on-write 策略
  • 容器中应用数据

    • 容器创建的文件在可写层
    • 使用 mount
6. Docker网络
  • 容器默认使用网络:Docker0(桥接)

  • 容器支持网络与类型:

    • bridge(本机内网络)
    • host(主机网卡)
    • overlay (跨主机网络)
    • none
    • Custom(网络插件)
  • 管理容器网络:docker network ls
    在这里插入图片描述

  • 备制支持 ifconfig 和 ping 命令的 ubuntu 容器

    • docker run --name unet -it --rm ubuntu bash
    • apt-get update
    • apt-get install net-tools
    • apt-get install iputils-ping -y
    • ifconfig(上述更新和安装工具截图太长就不放了)在这里插入图片描述我的IP地址为172.17.0.3,可以ping通
      在这里插入图片描述
  • 启动另一个命令窗口,由容器制作镜像:docker commit unet ubuntu:net
    在这里插入图片描述

  • Docker 默认网络

    • 容器通过桥(docker0)相连
    • IP-Forward通过NAT访问外面
    • 端口映射使外面访问容器
  • 创建自定义网络:docker network create mynet
    在这里插入图片描述

  • 在两个窗口创建 u1,u2 容器网络,并使用以下命令

    按照课件命令即可,截图太长不作展示
    在这里插入图片描述

7. Docker仓库
  • 容器仓库在 cncf 技术栈中属于供给层
    • 公共容器仓库服务
    • 私有容器仓库工具
  • 搭建私有容器仓库
  • 阿里云容器镜像服务(免费)实践

    根据课件完成即可
    在这里插入图片描述

8. 容器监控与日志

以下按照课件命令执行即可,

  • 检查docker的状态:
    在这里插入图片描述
    在这里插入图片描述

  • 查看容器内进程:

    在这里插入图片描述在这里插入图片描述

  • 容器详细信息:
    在这里插入图片描述
    在这里插入图片描述

  • 容器的日志查看:
    在这里插入图片描述
    在这里插入图片描述

9. docker图形化管理工具
10. DevOps与CI/ CD
  • 什么是DevOps:
    • 使用编程的手段,使得软件开发流程、测试、部署、运维自动化
    • 它是一组工具集合
  • 为什么要DevOps:
    • 面对无数的主机、容器,系统的管理人力无法胜任
    • 在微服务架构下,难以手工保证服务的测试与部署
  • 基于Docker的DevOps CI/CD实践
11. Golang应用容器化
12. Docker Engine API与开发

python语言版API开发

docker_swarm_ip_port = "192.168.109.130:2375"
docker_swarm_api_version = "v1.26"

def get_image():
	url = "http://%s/%s/images/json" % (docker_swarm_ip_port, docker_swarm_api_version)
	r = requests.get(url)
	if r.status_code == 200:
	    print(r.text)
	    result=json.loads(r.text)
	    imagelist=[]
	    for item in result:
	        imagelist.append({"Id":item["Id"],"RepoTags":item["RepoTags"]})
	    return {"tag":True,"msg":imagelist}
	elif r.status_code == 500:
	    print("服务错误!")
	    return {"tag":False,"msg":"服务错误!"}
	else:
	    print("getimage error")
	    return False

总结心得

这次实验虽然没有技术难度,只是按照课件敲命令,但是这种通览全篇的形式让我对docker有了更深入的理解和实操经验,过程中也体会到了docker使用的便捷,更加理解下图含义
在这里插入图片描述

参考资料
要让 Docker 容器作为系统服务自动启动,你需要在容器创建时配置使其成为守护进程(daemon mode),并在容器启动后将其添加到系统的启动脚本或服务管理工具中。以下是基本步骤: 1. **使用 `--restart` 参数**: 使用 `docker run` 的 `-d`( detached, 后台运行)选项,加上 `--restart always` 或 `--restart unless-stopped`,可以让容器容器退出后自动重启。前者表示无论容器状态如何都保持重启,后者只有当手动停止时才会停。 ```sh docker run -d --name my_service --restart always my_image ``` 2. **创建 Dockerfile 并设置 as 进入用户**: 如果你想要创建一个新的镜像并且希望容器以特定用户身份运行,可以在 Dockerfile 中指定 `USER` 声明。 ```Dockerfile FROM ubuntu:latest USER root CMD ["your-daemon-command"] EXPOSE your-port ENTRYPOINT ["/usr/sbin/init"] ``` 构建新镜像并运行: ```sh docker build -t my_service . docker run -d --name my_service -p host_port:container_port my_service ``` 3. **使用 systemd 或 sysvinit 管理**: 对于基于 Debian 或 Red Hat 类系的操作系统,你可以将 Docker 配置为 systemd 服务。首先,生成一个描述文件,比如 `/etc/systemd/system/my_service.service`,然后启用和启动它: ```bash cat << EOF > /etc/systemd/system/my_service.service [Unit] Description=My Docker Service After=docker.socket [Service] Restart=always ExecStart=/usr/bin/docker start my_service ExecStop=/usr/bin/docker stop my_service Type=forking [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable my_service systemctl start my_service ``` 4. **Ubuntu 上 Systemd 或 Upstart**: 类似地,在 Ubuntu 上可以使用 Systemd 的 `.service` 文件,或者 Upstart 的配置文件 `.conf`,然后分别用 `systemctl` 或 `update-rc.d` 来管理。 注意:这些步骤适用于大部分基于 Unix 系统的环境,如 Linux 和 macOS。Windows 上的服务管理略有不同,可以参考官方文档或相应的 Docker 参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值