docker技术(上)

一、docker简介

  Docker 是一个开源的应用容器引擎,于 2013 年由 Solomon Hykes 推出并开源。它基于 Go 语言开发,遵从 Apache2.0 协议。Docker 可以让开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。

  Docker 构建在 LXC(Linux Containers)之上,是一种轻量级的虚拟化技术。与传统虚拟机相比,Docker 容器更加轻量级,启动速度通常只需几秒钟,资源占用少,一台主机上可以同时运行数千个 Docker 容器。

Docker 容器具有以下特点:

  • 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  • 资源隔离:可以使用 cgroup 为每个进程容器分配不同的系统资源,如 CPU 和内存。
  • 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和 IP 地址。
  • 写时复制:采用写时复制方式创建根文件系统,部署快捷,节省内存和硬盘空间。
  • 日志记录:收集和记录每个进程容器的标准流,用于实时检索或批量检索。
  • 变更管理:容器文件系统的变更可以提交到新的映像中,重复使用以创建更多容器,无需模板或手动配置。
  • 交互式 Shell:可以分配一个虚拟终端并关联到任何容器的标准输入上。

  Docker 的发展历程分为起源阶段和发展阶段。起源阶段是 2008 年至 2013 年,由 Solomon Hykes、Kamel Founadi 和 Sebastien Pahl 在巴黎创立了 DotCloud 公司,旨在为软件开发人员提供云托管服务,2013 年推出了工具 Docker 并开源。发展阶段是 2014 年至 2016 年,Docker 引入了 Docker Compose 和 Docker Swarm,成立了 Docker 开放容器倡议(OCI),推出了 Docker for Mac 和 Docker for Windows 等。

  Docker 在现代软件开发和部署中具有重要作用,它可以简化配置、管理代码流水线、提高开发效率、提供一致的运行环境、优化资源利用、具有良好的隔离性和安全性、可移植性和跨平台性,易于扩展和管理。在 DevOps 和持续集成 / 持续部署(CI/CD)、微服务架构等领域有广泛应用。

docker与虚拟机对比

二、docker的部署

本实验在rhel9环境下配置

配置软件仓库

# cd /etc/yum.repos.d

# vim docker.repo

[docker]

name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/

gpgcheck=0

传输并下载软件包

[root@docker-node1 ~]# ls
anaconda-ks.cfg  docker.tar.gz
[root@docker-node1 ~]# tar zxf docker.tar.gz
[root@docker-node1 ~]# ls
anaconda-ks.cfg                               docker-ce-cli-27.1.2-1.el9.x86_64.rpm
containerd.io-1.7.20-3.1.el9.x86_64.rpm       docker-ce-rootless-extras-27.1.2-1.el
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm  docker-compose-plugin-2.29.1-1.el9.x8
docker-ce-27.1.2-1.el9.x86_64.rpm             docker.tar.gz
[root@docker-node1 ~]# dnf install *.rpm -y

注意:rhel9下载时需要删除runc软件包

[root@docker-node1 ~]# yum remove runc

 

[root@docker-node1 ~]# docker pull busybox
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: reque connection (Client.Timeout exceeded while awaiting headers)
由于网络不佳,拉取镜像源超时

在阿里云查找镜像加速器,并写入配置文件 

[root@docker-node1 docker]# vim daemon.json

再次尝试拉取镜像源

也可使用下载好的安装包拉去,效率更快

[root@docker-node1 ~]# ls 
anaconda-ks.cfg
busybox-latest.tar.gz
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
game2048.tar.gz
mario.tar.gz
nginx-latest.tar.gz

[root@docker-node1 ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
nginx                latest    5ef79149e0ec   5 weeks ago     188MB
busybox              latest    65ad0d468eb1   16 months ago   4.26MB
timinglee/game2048   latest    19299002fdbe   7 years ago     55.5MB
timinglee/mario      latest    9a35a9e43e8c   9 years ago     198MB

 运行nginx镜像源

[root@docker-node1 ~]# docker run -d --rm --name webserver -p 80:80 nginx 
09c091e024d1aab16af31ffc3e16f0ad1667cebee1d464fffc3771422b816a53
[root@docker-node1 ~]# docker rm -f webserver
webserver
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

[root@docker-node1 ~]# docker run -d --rm --name game1 -p 80:80 timinglee/game2048:latest
414bffb6699f4137590a0abf9c038629dda009d2e601916d2bd7a52953007b7c
[root@docker-node1 ~]# docker rm -f game1
game1

 

[root@docker-node1 ~]# docker run -d --rm --name game2 -p 80:8080 timinglee/mario:latest
28073e3277f38fdec2bae5cb1085bb02fbaae152f4e075880910d39960e147b2

 进入到容器并退出

[root@docker-node1 ~]# docker run -it --name test busybox
/ # 
/ # date
Sat Sep 21 03:26:30 UTC 2024
/ # exit
[root@docker-node1 ~]# docker rm test
test
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED  

在容器中执行命令 

相关参数
-d # 后台运行
-i # 交互式运行
-t # 打开一个终端
--name # 指定容器名称
-p # 端口映射 -p 80 : 8080 把容器 8080 端口映射到本机 80 端口
--rm # 容器停止自动删除容器
--network # 指定容器使用的网络

 

 

三、docker镜像构建 

构建参数

 相关参数示例:

[root@docker-node1 docker]# mkdir docker/
[root@docker-node1 docker]# cd docker/
[root@docker-node1 docker]# ls
[root@docker-node1 docker]# vim Dockerfile

 构建一个基础镜像

 注意不要忘记符号“.”

指定文件名
docker build -f /root/docker/timingle -t busybox:v4 .
[root@docker-node1 docker]# vim Dockerfile

 可替代参数LABEL KEY=VALUE

 此时,没有警告出现

#ADD 
[root@Docker-node1 docker]#touch leefile{1..3} 
[root@Docker-node1 docker]#tar zcf leefile.gz leefile* 
[root@Docker-node1 docker]#vim Dockerfile
FROM busybox 
MAINTAINER lee@timinglee.org
COPY leefile /
ADD leefile.gz / 
[root@Docker-node1 docker]#docker build -t example:v2
#ENV CMD
FROM busybox 
MAINTAINER ee@timinglee.org 
ENV NAME lee 
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 1ee 
FROM busybox 
MAINTAINER lee@timinglee.org 
ENV NAME lee 
CMD ["/bin/echo", "$NAME"] 
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 $NAME
#ENV CMD 
FROM busybox 
MAINTAINER lee@timinglee.org 
ENV NAME lee 
CMD ["/bin/sh","-c","/bin/echo $NAME"]
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 lee

 Dockerfile构建企业实例

使用centos7系统

[root@docker-node1 ~]# docker run -it --rm centos:7
[root@a43e892b111a /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@a43e892b111a ~]# cd /etc/yum.repos.d/
[root@a43e892b111a yum.repos.d]# rm -fr *
[root@a43e892b111a yum.repos.d]# ls
[root@a43e892b111a yum.repos.d]# vi centos.repo
[root@a43e892b111a ~]# [root@docker-node1 ~]# 
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
a43e892b111a   centos:7   "/bin/bash"   8 minutes ago   Up 8 minutes             sweet_dirac
[root@docker-node1 ~]# dnf install httpd -y
[root@docker-node1 ~]# vim /etc/httpd/conf/httpd.conf
[root@docker-node1 ~]# mkdir /var/www/html/centos7
[root@docker-node1 ~]# mount /dev/sr0 /var/www/html/centos7/
mount: /var/www/html/centos7: WARNING: source write-protected, mounted read-only.
[root@docker-node1 ~]# ls
anaconda-ks.cfg                               docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
busybox-latest.tar.gz                         docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
centos-7.tar.gz                               docker.tar.gz
containerd.io-1.7.20-3.1.el9.x86_64.rpm       game2048.tar.gz
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm  mario.tar.gz
docker-ce-27.1.2-1.el9.x86_64.rpm             nginx-1.23.tar.gz
docker-ce-cli-27.1.2-1.el9.x86_64.rpm         nginx-latest.tar.gz

 

[root@docker-node1 centos7]# docker run -it --rm centos:7
[root@4f451ce23f5b /]# [root@docker-node1 centos7]# docker run -it --rm centos:7
[root@825c0ee01010 /]# [root@docker-node1 centos7]# 
[root@docker-node1 centos7]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
825c0ee01010   centos:7   "/bin/bash"   12 seconds ago   Up 12 seconds             serene_cori
4f451ce23f5b   centos:7   "/bin/bash"   27 seconds ago   Up 27 seconds             sweet_jang
[root@docker-node1 centos7]# docker rmi 825c0ee01010
Error response from daemon: No such image: 825c0ee01010:latest
[root@docker-node1 centos7]# docker commit -m "add repo" serene_cori centos7:v1
sha256:7817b85b46b3ea33d9d98762adb6cb72cd5fb3a600742ef69fff8c0aa9a4a81b
[root@docker-node1 centos7]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
825c0ee01010   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes             serene_cori
4f451ce23f5b   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes             sweet_jang

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值