首页
学习
活动
专区
圈层
工具
发布

Docker

作者头像
Miloce
发布2022-09-28 11:26:49
发布2022-09-28 11:26:49
7970
举报
文章被收录于专栏:JoyJoy

bios开机自检–根据bios启动项–读取硬盘第一个扇区

grub,uefi, centos7, 加载内核,启动系统第一个进

程/sbin/init systemd

容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的

第一个进程

容器优势: 启动快,性能高,损耗少,轻量级

100 虚拟机 100 个服务 10 宿主机

100 容器 100 个服务 6 宿主机

0. 1 什么是docker

docker是一种打包技术

虚拟化的技术就是用来解决宿主机与虚拟机之间的耦合

问题(简称“解耦”),传统虚拟化技术是属于完全解耦

的,而docker这种虚拟化技术是属于半解耦的。

耦合:就是指两个或两个以上的体系或两种运动形式间

通过相互作用而彼此影响以至联合起来的现象;

解耦:接触耦合、冲突现象;

Docker是如何解耦的呢?这就需要使用到 ——

Namespace(命名空间)。

Namespace(命名空间):是Linux为我们提供的用于分

离进程树、网络接口、挂载点以及进程间通信等资源的

方法。

主机名 内存 ip

docker01 2G 10.0.0.1 1

docker02 2G 10.0.0.

Namespace(命名空间)在docker中主要实现了六项隔离

0. 1 3:docker-ce的安装

UTS 主机和域名

IPC 信号量、消息队列和共享内容

PID 进程编号

代码语言:javascript
复制
network 网络设备、网络栈、端口等
mount 挂载点(文件系统)
user 用户和用户组
代码语言:javascript
复制
#安装docker-ce
wget -O /etc/yum.repos.d/docker-ce.repo
https://download.docker.com/linux/centos/dock
er-ce.repo
sed -i
's+download.docker.com+mirrors.tuna.tsinghua.
edu.cn/docker-ce+' /etc/yum.repos.d/docker-
ce.repo
yum install docker-ce -y

0. 1 4:docker主要内容

docker是一个cs架构, docker主要:镜像 容器 仓库 网络

存储 监控

docker是一个软件的打包技术.

代码语言:javascript
复制
vim /etc/docker/daemon.json
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
代码语言:javascript
复制
systemctl enable docker
systemctl start docker
代码语言:javascript
复制
#验证
[root@docker01 yum.repos.d]# docker version
Client: Docker Engine - Community
Version: 19 .03.
API version: 1.
Go version: go1.12.
Git commit: 633a0ea
Built: Wed Nov 13 07 :25:41 2019
OS/Arch: linux/amd
Experimental: false

0. 1 5:docker镜像常用命令

0. 1 6:docker容器的常用命令

代码语言:javascript
复制
docker run -d -p 80 :80 nginx:latest
run 创建并启动一个容器
-d 放后台启动
-p 端口映射
nginx:latest docker镜像名称
代码语言:javascript
复制
docker search 搜索镜像, 优先选官方,stars数量多
docker pull 拉取镜像(下载镜像)
docker push 推送镜像(上传镜像)
docker load 导入镜像
例子: docker load -i docker_nginx.tar.gz
docker save 导出镜像
例子:docker save centos:7 -o
docker_centos7.tar.gz
docker images 查看镜像列表
docker rmi 删除镜像
docker tag 给镜像打标签

容器想要放在后台一直运行的化,那么容器的初始命令,必

须夯住(前台运行),否则容器就会退出.

0. 1 7:docker端口映射

代码语言:javascript
复制
docker run 创建并启动容器
例子:docker run -d -it -p 80 :
nginx:latest
docker create 创建容器 --name
docker start 启动容器
docker stop 停止容器
docker restart 重启容器
docker kill 强制停止容器
docker ps 查看容器列表 -a 查看所有容器
docker rm 删除容器
批量删除所有容器 docker rm -f `docker ps -
a -q`
docker exec 进入正在运行的容器(分配一个新终
端)
例子: docker exec -it 容器id/容器名字
/bin/bash(/bin/sh)
docker attach 进入正在运行的容器(使用相同的终
端),偷偷离开的快捷键ctrl +p,ctrl +q

前台运行

代码语言:javascript
复制
nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize

0. 1 8:docker数据卷

小练习: 只启动一个nginx容器,要求访问 80 端口,出现

nginx默认欢迎首页,访问 81 端口,出现小鸟飞飞.

0. 1 9:手动制作docker镜像

代码语言:javascript
复制
docker run
-p 宿主机端口:容器端口
-p 宿主机ip1:宿主机端口:容器端口 (多个容器同时
使用 80 端口)
-p 宿主机ip1::容器端口 随机端口映射
-p 宿主机ip1::容器端口/udp 使用udp协议做随机
端口映射
-p 80 :80 -p 3306 :
-p 1111 -1119:1111-1119 端口范围映射
代码语言:javascript
复制
docker run
-v 宿主机绝对目录:容器目录
-v 容器目录 #创建一个随机卷,来持久化容器
的目录下的数据
-v 卷名:容器目录 #创建一个固定名字的卷,来持
久化容器的目录下的数据
--volumes-from 跟某一个容器挂载所有相同的卷

制作一个基于centos6系统的nginx镜像(单服务)

制作一个基于centos6系统的kod网盘的镜像(多服务)

代码语言:javascript
复制
1 :启动一个纯净的centos:6.9容器,安装nginx
echo '192.168.12.201 mirrors.aliyun.com'
>>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y
2 :把安装好服务的容器,提交为镜像
docker container commit eb109f
centos6.9_nginx:v
代码语言:javascript
复制
3 :测试镜像的功能
docker run -d -p 82 :80 centos6.9_nginx:v
nginx -g 'daemon off;'
代码语言:javascript
复制
1 :启动一个centos6.9_nginx:v1,再安装php
echo '192.168.12.201 mirrors.aliyun.com'
>>/etc/hosts
yum install php-fpm php-gd php-mbstring -y
vi /etc/php-fpm.d/www.conf
service php-fpm start
cd /etc/nginx/conf.d/
vi default.conf
mkdir /html
cd /html

制作一个基于centos7系统的nginx+sshd双服务镜像

代码语言:javascript
复制
wget
http://192.168.19.200/191127/kodexplorer4.40.
zip
curl -o kodexplorer4.40.zip
http://192.168.19.200/191127/kodexplorer4.40.
zip
yum install unzip -y
unzip kodexplorer4.40.zip
chown -R nginx:nginx.
代码语言:javascript
复制
vi /init.sh
#!/bin/bash
代码语言:javascript
复制
service php-fpm start
nginx -g 'daemon off;'
代码语言:javascript
复制
2 :把安装好服务的容器,提交为镜像
docker commit 47208e3e3796 kod:v
3 :测试镜像的功能
docker run -d -p 83 :80 kod:v2 /bin/bash
/init.sh

0. 1 10:自动制作docker镜像

镜像: 中药

dockerfile: 配方

dockerfile常用指令

代码语言:javascript
复制
curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
yum install nginx -y
yum install openssh-server -y
yum install initscripts -y
/usr/sbin/sshd-keygen
echo '123456'|passwd --stdin root
/usr/sbin/sshd -D
vi /init.sh

根据dockerfile自动构建镜像的思路

dockerfile单服务例子 1 :

FROM 基础镜像

RUN 制作镜像过程中需要的执行命令

CMD 容器启动的时候执行的初始命令,容易被替换

ENTRYPOINT 容器启动的时候执行的初始命令,不能被

代码语言:javascript
复制
替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为
ENTRYPOINT命令的参数
ADD 把dockerfile当前目录下的文件拷贝到容器中
(自动解压tar包)
COPY 把dockerfile当前目录下的文件拷贝到容器中
(不解压tar包)
WORKDIR 指定容器的默认工作目录
EXPOSE 镜像要暴露的端口
代码语言:javascript
复制
a:手动制作docker镜像,记录历史命令
b:根据历史命令编写dockerfile文件
c:docker build构建docker镜像
d:测试镜像的功能

dockerfile多服务例子 2 :

代码语言:javascript
复制
FROM centos:6.
RUN echo '192.168.19.200 mirrors.aliyun.com'
>>/etc/hosts
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
CMD ["nginx","-g","daemon off;"]
代码语言:javascript
复制
FROM centos6.9_nginx:v
RUN yum install php-fpm php-gd php-mbstring -
y
ADD http://www.conf /etc/php-fpm.d/www.conf
ADD default.conf
/etc/nginx/conf.d/default.conf
RUN mkdir /html
WORKDIR /html
RUN curl -o kodexplorer4.40.zip
http://192.168.19.200/191127/kodexplorer4.40.
zip
RUN yum install unzip -y
RUN unzip kodexplorer4.40.zip
RUN chown -R nginx:nginx.
ADD init.sh /init.sh
代码语言:javascript
复制
CMD ["/bin/bash","/init.sh"]
代码语言:javascript
复制
vi /init.sh

dockerfile使用环境变量的例子:

代码语言:javascript
复制
#!/bin/bash
代码语言:javascript
复制
service php-fpm start
nginx -g 'daemon off;'
代码语言:javascript
复制
FROM centos:
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx openssh-server
initscripts -y
RUN /usr/sbin/sshd-keygen
ADD init.sh /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]
代码语言:javascript
复制
vi init.sh
#!/bin/bash
if [ -z $SSH_PWD ];then
SSH_PWD=$
fi
代码语言:javascript
复制
echo $SSH_PWD|passwd --stdin root
nginx
/usr/sbin/sshd -D

0. 1 11:docker镜像的分层(复用,

节省空间)

0. 1 12:dockerfile的优化

0. 1 13:容器间的互联

docker run –link 正在运行容器的名字

代码语言:javascript
复制
a: 使用体积小的镜像alpine
b:尽可能的清理无用的缓存文件
c:修改dockerfile的时候,尽可能把修改的内容放在
最后
d:使用.dockerignore忽略构建docker镜像时,不需
要的文件
代码语言:javascript
复制
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin

docker run –name zabbix-java-gateway -t -d zabbix/zabbix-java-gateway:latest

docker run –name zabbix-server-mysql -t -e DB_SERVER_HOST=”mysql-server” -e MYSQL_DATABASE=”zabbix” -e MYSQL_USER=”zabbix” -e MYSQL_PASSWORD=”zabbix_pwd” -e MYSQL_ROOT_PASSWORD=”root_pwd” -e ZBX_JAVAGATEWAY=”zabbix-java-gateway” --link mysql-server:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 -d zabbix/zabbix-server-mysql:latest

docker run –name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST=”mysql-server” -e MYSQL_DATABASE=”zabbix” -e MYSQL_USER=”zabbix” -e MYSQL_PASSWORD=”zabbix_pwd” -e MYSQL_ROOT_PASSWORD=”root_pwd” --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:80 -d zabbix/zabbix-web-nginx-mysql:latest

0. 1 14:单机版的容器编排

yum install docker-compose -y(需要epel源)

代码语言:javascript
复制
version: '3'
代码语言:javascript
复制
services:
mysql-server:
image: mysql:5.
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pwd
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
command: --character-set-server=utf
代码语言:javascript
复制
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:latest
restart: always
代码语言:javascript
复制
zabbix-server:
depends_on:
  • mysql-server image: zabbix/zabbix-server-mysql:latest restart: always environment: DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix

docker-compose up -d 启动服务

docker-compose down 停止服务

0. 1 15:私有仓库docker-registry

代码语言:javascript
复制
MYSQL_PASSWORD: zabbix_pwd
MYSQL_ROOT_PASSWORD: root_pwd
ZBX_JAVAGATEWAY: zabbix-java-gateway
ports:
  • “10051:10051”
代码语言:javascript
复制
zabbix-web-nginx-mysql:
depends_on:
  • zabbix-server image: zabbix/zabbix-web-nginx- mysql:latest ports:
  • “80:80” restart: always environment: DB_SERVER_HOST: mysql-server MYSQL_DATABASE: zabbix MYSQL_USER: zabbix MYSQL_PASSWORD: zabbix_pwd MYSQL_ROOT_PASSWORD: root_pwd

#启动私有仓库

docker run -d -p 5000 :5000 –restart=always –name registry -v /opt/myregistry:/var/lib/registry registry

镜像地址

nginx:1.15 官方仓库的官方镜像 nginx/nginx:1.15 官方仓库的用户镜像

daocloud.io/nginx/nginx:1.15 私有仓库的镜像

上传镜像

docker tag alpine:3. 10 .0.0.11:5000/alpine:3. docker image push 10 .0.0.11:5000/alpine:3.

第一次上传镜像会报错

vim /etc/docker/daemon.json { “insecure-registries”: [“10.0.0.11:5000”] }

systemctl restart docker

docker image push 10 .0.0.11:5000/alpine:3.

#下载镜像

docker image pull 10 .0.0.11:5000/alpine:3.

0. 1 16: 企业级私有仓库

harbor(docker-compose)

为harbor配置https证书

#下载安装器

代码语言:javascript
复制
https://github.com/goharbor/harbor/releases/d
ownload/v1.10.0/harbor-offline-installer-
v1.10.0.tgz
#解压
[root@docker01 opt]# tar xf harbor-offline-
installer-v1.8.0.tgz
#修改配置文件
cd harbor
vim harbor.yml
hostname: 10 .0.0.
harbor_admin_password: 123456
#执行安装脚本
./install.sh

0. 1 17:docker基础网络

四种基础网络类型

创建自定义网络

代码语言:javascript
复制
#修改harbor.yml
#配置域名
hostname: blog.oldqiang.com
代码语言:javascript
复制
#配置证书
https:
port: 443
certificate:
/opt/certs/nginx/1_blog.oldqiang.com_bundle.c
rt
private_key:
/opt/certs/nginx/2_blog.oldqiang.com.key
代码语言:javascript
复制
#重新执行安装脚本
./install.sh
代码语言:javascript
复制
bridge 默认类型 NAT模式
host h

0. 1 18:跨宿主机容器间的通讯

之macvlan

0. 1 19:跨宿主机容器间的通讯

之overlay

代码语言:javascript
复制
docker network create -d bridge --subnet
172 .18.0.0/16 --gateway 172 .18.0.1 oldqiang

#创建网络

代码语言:javascript
复制
docker network create -d macvlan --subnet
10 .0.0.0/24 --gateway 10 .0.0.254 -o
parent=eth0 macvlan_1
代码语言:javascript
复制
#启动容器
docker run -it --network macvlan_1 --ip
10 .0.0.105 alpine:3.9
代码语言:javascript
复制
docker03上: consul存储ip地址的分配
docker run --restart=always -d -p 8500 :8500 -
h consul --name consul progrium/consul -
server -bootstrap

0. 1 20:docker容器的监控

docker01、 02 上: vim /etc/docker/daemon.json { “cluster-store”: “consul://10.0.0.13:8500”, “cluster-advertise”: “10.0.0.11:2376” }

vim /usr/lib/systemd/system/docker.service systemctl daemon-reload systemctl restart docker

2 )创建overlay网络 docker network create -d overlay –subnet 172 .20.2.0/24 –gateway 172 .20.2.254 ol1

3 )启动容器测试

docker run -it –network ol1 –name oldboy01 alpine:3.9 /bin/sh 每个容器有两块网卡,eth0实现容器间的通讯,eth1实现 容器访问外网

#客户端节点

启动node-exporter

docker run -d -p 9100 :9100 -v “/:/host:ro,rslave” –name=node_exporter quay.io/prometheus/node-exporter – path.rootfs /host

启动cadvisor

docker run –volume=/:/rootfs:ro – volume=/var/run:/var/run:rw – volume=/sys:/sys:ro – volume=/var/lib/docker/:/var/lib/docker:ro - -publish= 8080 :8080 –detach=true – name=cadvisor google/cadvisor:latest

prometheus节点

安装prometheus和grafana tar xf prometheus-2.12.0.linux-amd64.tar.gz

cd prometheus-2.12.0.linux-amd64/

vim prometheus.yml scrape_configs:

  • job_name: ‘prometheus’ static_configs:
  • targets: [‘localhost:9090’]
  • job_name: ‘cadvisor’ static_configs:
  • targets: [‘10.0.0.11:8080’,’10.0.0.12:8080’]
  • job_name: ‘node_exporter’ static_configs:
  • targets: [‘10.0.0.11:9100’,’10.0.0.12:9100’]

./prometheus –config.file=”prometheus.yml”

安装grafana

yum localinstall grafana-6.3.3-1.x86_64.rpm - y systemctl start grafana-server.service systemctl enable grafana-server.service

访问grafana http://IP:3000,默认账号

admin:admin 新建数据源–导入dashboard模板

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bios开机自检–根据bios启动项–读取硬盘第一个扇区
  • grub,uefi, centos7, 加载内核,启动系统第一个进
  • 程/sbin/init systemd
  • 容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的
  • 第一个进程
  • 容器优势: 启动快,性能高,损耗少,轻量级
  • 100 虚拟机 100 个服务 10 宿主机
  • 100 容器 100 个服务 6 宿主机
  • 0. 1 什么是docker
    • docker是一种打包技术
    • 虚拟化的技术就是用来解决宿主机与虚拟机之间的耦合
    • 问题(简称“解耦”),传统虚拟化技术是属于完全解耦
    • 的,而docker这种虚拟化技术是属于半解耦的。
    • 耦合:就是指两个或两个以上的体系或两种运动形式间
    • 通过相互作用而彼此影响以至联合起来的现象;
    • 解耦:接触耦合、冲突现象;
    • Docker是如何解耦的呢?这就需要使用到 ——
    • Namespace(命名空间)。
    • Namespace(命名空间):是Linux为我们提供的用于分
    • 离进程树、网络接口、挂载点以及进程间通信等资源的
    • 方法。
    • 主机名 内存 ip
    • docker01 2G 10.0.0.1 1
    • docker02 2G 10.0.0.
    • Namespace(命名空间)在docker中主要实现了六项隔离
  • 0. 1 3:docker-ce的安装
    • UTS 主机和域名
    • IPC 信号量、消息队列和共享内容
    • PID 进程编号
  • 0. 1 4:docker主要内容
    • docker是一个cs架构, docker主要:镜像 容器 仓库 网络
    • 存储 监控
    • docker是一个软件的打包技术.
  • 0. 1 5:docker镜像常用命令
  • 0. 1 6:docker容器的常用命令
    • 容器想要放在后台一直运行的化,那么容器的初始命令,必
    • 须夯住(前台运行),否则容器就会退出.
  • 0. 1 7:docker端口映射
    • 前台运行
  • 0. 1 8:docker数据卷
    • 小练习: 只启动一个nginx容器,要求访问 80 端口,出现
    • nginx默认欢迎首页,访问 81 端口,出现小鸟飞飞.
  • 0. 1 9:手动制作docker镜像
    • 制作一个基于centos6系统的nginx镜像(单服务)
    • 制作一个基于centos6系统的kod网盘的镜像(多服务)
    • 制作一个基于centos7系统的nginx+sshd双服务镜像
  • 0. 1 10:自动制作docker镜像
    • 镜像: 中药
    • dockerfile: 配方
    • dockerfile常用指令
    • 根据dockerfile自动构建镜像的思路
    • dockerfile单服务例子 1 :
      • FROM 基础镜像
      • RUN 制作镜像过程中需要的执行命令
      • CMD 容器启动的时候执行的初始命令,容易被替换
      • ENTRYPOINT 容器启动的时候执行的初始命令,不能被
    • dockerfile多服务例子 2 :
    • dockerfile使用环境变量的例子:
  • 0. 1 11:docker镜像的分层(复用,
  • 节省空间)
  • 0. 1 12:dockerfile的优化
  • 0. 1 13:容器间的互联
    • docker run –link 正在运行容器的名字
  • 0. 1 14:单机版的容器编排
    • yum install docker-compose -y(需要epel源)
    • docker-compose up -d 启动服务
    • docker-compose down 停止服务
  • 0. 1 15:私有仓库docker-registry
    • #启动私有仓库
  • 镜像地址
  • 上传镜像
  • 第一次上传镜像会报错
    • #下载镜像
  • 0. 1 16: 企业级私有仓库
  • harbor(docker-compose)
    • 为harbor配置https证书
      • #下载安装器
  • 0. 1 17:docker基础网络
    • 四种基础网络类型
    • 创建自定义网络
  • 0. 1 18:跨宿主机容器间的通讯
  • 之macvlan
  • 0. 1 19:跨宿主机容器间的通讯
  • 之overlay
    • #创建网络
  • 0. 1 20:docker容器的监控
    • #客户端节点
  • 启动node-exporter
  • 启动cadvisor
  • prometheus节点
  • 安装grafana
  • 访问grafana http://IP:3000,默认账号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档