docker

什么是docker
是⼀个开源的应⽤容器引擎,基于go语⾔开发并遵循了apache2.0协议开源
●是在Linux容器⾥运⾏应⽤的开源⼯具
●是⼀种轻量级的"虚拟机”
●Docker的容器技术可以在⼀台主机 上轻松为任何应⽤创建⼀个轻量级的、 可移植的、⾃给⾃⾜的容器。
借助 Docker ,您可将容器当做重量轻、模块化的虚拟机使⽤。同时,您还将获得⾼度的灵活性,从⽽实现对容器
的⾼效创建、部署及复制,并能将其从⼀个环境顺利迁移⾄另⼀个环境。

Docker特点: 标准化、安全性 、隔离型、节省资源、可移植性、等

Docker 如何⼯作?
Docker 是⼀种容器化平台,可以将应⽤程序和它们的依赖项打包成⼀个轻量级的、可移植的容器,以便在不同的
计算机环境中运⾏。Docker 的⼯作原理如下:

  1. Docker 使⽤⼀个称为 Dockerfile 的⽂件来定义容器的配置。Dockerfile 中包含了应⽤程序和依赖项的安装、
    环境变量设置、⽂件系统设置等指令。
  2. Docker 使⽤ Dockerfile 来创建⼀个镜像。镜像是⼀个只读的⽂件系统,包含了应⽤程序和依赖项以及容器运
    ⾏所需的所有⽂件和设置。每个镜像都有⼀个唯⼀的标识符,称为镜像 ID。
  3. 使⽤镜像来创建容器。容器是镜像的运⾏实例,是⼀个隔离的、可执⾏的环境。容器中包含了应⽤程序和依赖
    项以及容器运⾏所需的所有⽂件和设置。容器可以在任何 Docker ⽀持的计算机上运⾏,并且可以随时启动、
    停⽌或删除。
  4. Docker 使⽤⼀个称为 Docker 引擎的守护程序来管理容器。Docker 引擎可以创建、启动、停⽌和删除容器,
    还可以监视容器的状态并提供⽇志输出和统计信息

容器的特点

容器化越来越受欢迎,因为容器是:
●灵活:即使是最复杂的应⽤也可以集装箱化。
●轻量级:容器利⽤并共享主机内核。
●可互换:可以即时部署更新和升级。
●便携式:可以在本地构建,部署到云,并在任何地⽅运⾏。
●可扩展:可以增加并⾃动分发容器副本。
●可堆叠:可以垂直和即时堆叠服务。

 容器核⼼技术
docker容器本质就是宿主机的个进程,docker容器是通过namespace实现资源隔离,通过cgroup实现资源限制
通过写时复制技术(copy-on-write)实现了⾼效的⽂件操作(类似虚拟机的磁盘⽐如分配500g并不是实际占⽤物理磁
盘500g)

DockerFile

dockerfile主要组成部分:

基础镜像信息 FROM centos:6.8
制作镜像操作指令RUN yum insatll openssh-server \-y
容器启动时执⾏指令 CMD \["/bin/bash"\]

dockerfile常⽤指令:

FROM 这个镜像的妈妈是谁?(指定基础镜像)
MAINTAINER 告诉别⼈,谁负责养它?(指定维护者信息,可以没有)
LABLES author=wing
RUN 你想让它⼲啥(在命令前⾯加上RUN即可)
ADD 给它点创业资⾦(COPY⽂件,会⾃动解压)
WORKDIR 我是cd,今天刚化了妆(设置当前⼯作⽬录)
VOLUME 给它⼀个存放⾏李的地⽅(设置卷,挂载主机⽬录)
EXPOSE 它要打开的⻔是啥(指定对外的端⼝)
CMD 奔跑吧,兄弟!(指定容器启动后的要⼲的事情)

dockerfile其他指令:

COPY 复制⽂件
ENV 环境变量
ENTRYPOINT 容器启动后执⾏的命令

构建docker镜像

[root@docker01 base]# docker build -t centos6.8-ssh .
-t 为镜像标签打标签 . 表示当前路径

docker中镜像分层

最大的好处资源共享

zabbix监控搭建

流程
1、启动⼀个mysql的容器
2、启动java-gateway容器监控java服务
3、启动zabbix-mysql容器使⽤link连接mysql与java-gateway
4、启动zabbix web显示,使⽤link连接zabbix-mysql与mysql。
默认用户
"user": "Admin",
"password": "zabbix"

docker网络类型

None 不为容器配置任何⽹络功能,没有⽹络 --net=none
Container 与另⼀个运⾏中的容器共享Network Namespace,--net=container:containerID
Host 与主机共享Network Namespace,--net=host
Bridge Docker设计的NAT⽹络模型(默认类型)

Bridge默认docker⽹络隔离基于⽹络命名空间,在物理机上创建docker容器时会为每⼀个docker容器分配⽹络命
名空间,并且把容器IP桥接到物理机的虚拟⽹桥上。

不为容器配置⽹络功能
此模式下创建容器是不会为容器配置任何⽹络参数的,如:容器⽹卡、IP、通信路由等,全部需要⾃⼰去配置。

[root@docker01 ~]# docker run -it --network none busybox:latest /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever

与其他容器共享⽹络配置(Container)
此模式和host模式很类似,只是此模式创建容器共享的是其他容器的IP和端⼝⽽不是物理机,此模式容器⾃身是不
会配置⽹络和端⼝,创建此模式容器进去后,你会发现⾥边的IP是你所指定的那个容器IP并且端⼝也是共享的,⽽
且其它还是互相隔离的,如进程等。

[root@docker01 ~]# docker run -it --network container:mywordpress_db_1 busybox:latest 
/bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
105: eth0@if106: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
 link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
 inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
 valid_lft forever preferred_lft forever

使⽤宿主机⽹络
此模式创建的容器没有⾃⼰独⽴的⽹络命名空间,是和物理机共享⼀个Network Namespace,并且共享物理机的
所有端⼝与IP,并且这个模式认为是不安全的。

[root@docker01 ~]# docker run -it --network host busybox:latest /bin/sh

查看⽹络列表
[root@docker01 ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
b15e8a720d3b bridge bridge local
345d65b4c2a0 host host local
bc5e2a32bb55 mywordpress_default bridge local
ebf76eea91bb none null local

docker企业级镜像仓库harbor

1、安装docker、docker-compose
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.3.0.tgz

tar xf harbor-offline-installer-v1.3.0.tgz

2、修改主机及web界⾯密码
[root@docker01 harbor]# vim harbor.cfg
 ···
 hostname = 127.0.0.1
 harbor_admin_password = Harbor12345
 ···
3、执⾏安装脚本
[root@docker01 harbor]# ./install.sh

4、镜像推送到仓库的指定项⽬
[root@docker02 ~]# docker tag centos:6.8 10.0.0.100/clsn/centos6.8:1.0
[root@docker02 ~]# 
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED 
SIZE
busybox latest 5b0d59026729 8 days ago 
1.15MB
10.0.0.100/clsn/centos6.81.06704d778b3ba 2 months ago 195MB
centos 6.86704d778b3ba 2 months ago 195MB
[root@docker02 ~]# docker login 10.0.0.100
Username: admin
Password:
Login Succeeded

5、推送镜像
[root@docker02 ~]# docker push 10.0.0.100/clsn/centos6.8
The push refers to repository [10.0.0.100/clsn/centos6.8]
e00c9229b481: Pushing 13.53MB/194.5MB

使⽤容器的建议

1. 不要以拆分⽅式进⾏应⽤程序发布
2. 不要创建⼤型镜像
3. 不要在单个容器中运⾏多个进程
4. 不要再镜像内保存凭证,不要依赖IP地址
5. 以⾮root⽤户运⾏进程
6. 不要使⽤“最新”标签
7. 不要利⽤运⾏中的容器创建镜像
8. 不要使⽤单层镜像
9. 不要将数据存放在容器内

关于Docker容器的监控

容器的基本信息
包括容器的数量、ID、名称、镜像、启动命令、端⼝等信息
容器的运⾏状态
统计各状态的容器的数量,包括运⾏中、暂停、停⽌及异常退出
容器的⽤量信息
统计容器的CPU使⽤率、内存使⽤量、块设备I/O使⽤量、⽹络使⽤情况等资源的使⽤情况
posted @ 2025-03-18 17:57  basickill  阅读(38)  评论(0)    收藏  举报