暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker容器初识篇

云原生数字化 2020-07-15
294



容器概述

容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。

隔离的环境拥有自己的系统文件,ip地址,主机名等



容器与虚拟化的区别 

kvm虚拟化:需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)




1.linux开机启动流程:
bios开机硬件自检 basic input output system
根据bios设置的优先启动项boot 网卡 硬盘 u盘 光驱 读取grub(mbr)引导 2T UEFI(gpt分区) mbr硬盘分区信息,内核加载路径,加载内核
启动第一个进程/sbin/init systemd
系统初始化完成 运行服务(nginx,httpd,mysql) 。。。




2.容器启动流程:共用宿主机内核:第一个进程直接启动服务(nginx,httpd,mysql)




容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统

Docker引擎安装

10.0.0.11:修改主机名和host解析
rm -fr /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo


sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo


安装docker-ce
yum install docker-ce -y


Docker结构

docker是传统的CS架构分为docker client和docker server,和mysql一样
查看docker版本:
docker version


docker主要组件有:镜像、容器、仓库, 网络,存储


启动容器必须需要一个镜像,仓库存储镜像 容器--->镜像--->仓库


启动第一个容器

docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行 部署服务,环境问题
一次构建,处处运行


docker是一种软件的打包技术
docker初次体验:安装Nginx步骤:官网下载Nginx源码包wget
tar 创建Nginx用户
编译安装 ./config.... 修改配置文件, 启动


配置docker镜像加速
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}


docker run -d -p 80:80 nginx
run(创建并启动一个容器)
-d 放在后台
-p 端口映射
nginx docker镜像的名字


Docker镜像管理

搜索镜像 docker search 选镜像的建议:
1,优先考虑官方
2,stars数量多
官方镜像仓库地址:hub.docker.com


获取镜像
docker pull(push) 镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com官方
pull docker pull centos:6.8(没有指定版本,默认会下载最新版)


私有仓库pull
docker pull daocloud.io/huangzhichong/alpine-cn:latest


查看镜像列表
docker images or docker image ls


删除镜像
docker rmi
例子:docker image rm centos:latest


导出镜像
docker save
例子:docker image save centos:latest -o docker-centos7.4.tar.gz


导入镜像
docker load
例子:docker image load -i docker-centos7.4.tar.gz
===============================================================================================
docker search php 在官方仓库中查询镜像
docker pull nginx 拉取镜像
docker image ls 查看所有镜像
docker images
docker image import docker_centos6.9.tar.gz 导入镜像但不带镜像名称和版本号
docker image load -i docker_alpine3.9.tar.gz 导入镜像
docker image save nginx:latest -o /tmp/docker_nginx.tar.gz 导出镜像
docker image rm busybox:latest 删除镜像
docker rmi
docker image history nginx 查看镜像历史
docker image tag a19653214294 centos:6.9    给镜像设定名称版本号


Docker容器管理

docker run -d -p 80:80 nginx:latest  
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v 源地址(宿主机):目标地址(容器)


nginx docker镜像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it 分配交互式的终端interactive tty
--name 指定容器的名字
/bin/sh覆盖容器的初始命令


运行容器
docker run image_name
docker run 等同于 docker create + docker start


启动容器
docker start


停止容器
docker stop CONTAINER_ID


杀死容器
docker kill container_name


查看容器列表
docker ps(-a -l -q)


进入正在运行的容器(目的,调试,排错)
*** docker exec (会分配一个新的终端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)


docker attach(使用同一个终端) 偷偷离开的快捷键ctrl+p,ctrl+q
docker attach [OPTIONS] CONTAINER


删除容器
docker rm


批量删除容器
docker rm -f `docker ps -a -q`


总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!


业务在容器中运行:初始命令一定要夯住并且启动服务
例如:
nginx -g 'daemon off;'
/usr/sbin/zabbix_agentd -f -c /etc/zabbix/zabbix_agentd.conf
===================================================================================
docker create centos:6.9 创建一个容器
docker start 4a0ab8445501 启动容器
docker stop 4a0ab8445501 停止一个容器
docker restart 20da4e87d10f 重启一个容器


docker ps:查看容器,默认查看正在运行的
-a:查看所有容器
-l:查看最新的容器
-q: 查看所有容器的id


docker run -d nginx:latest:创建运行一个容器相当于 create+start
-d:将程序放在后台执行
-p:指定映射端口
-v:指定将宿主机文件挂载到容器中的指定文件


docker rm b3d15ddb5f97 删除一个容器[id]
-f:强制删除
docker rm -f `docker ps -a -q` 批量删除
docker kill 20da4e87d10f 杀死一个容器


docker exec -it 容器id或容器名字 /bin/bash(/bin/sh) 进入正在运行的容器
docker attach(使用同一个终端) 偷偷离开的快捷键ctrl+p,ctrl+q


docker exec -it heuristic_buck /bin/bash 开启一个新的会话窗口并进入一个容器
docker attach 20da4e87d10f 使用同一个会话窗口并进入容器
docker rename heuristic_buck yiliao 修改容器的名称
docker logs yiliao 查看容器的终端输出(日志)
docker cp 容器:宿主机
docker diff 比对容器修改的操作
docker export ID 导出容器
docker import  ID  导入容器


Docker容器端口映射

1. docker默认使用nat网络,使用命令-p指定,docker会自动添加iptables规则实现端口映射

2. 映射80端口到容器的80端口---81到81:

docker run -d -p 80:80 -p 81:81 nginx:latest

3. 多容器使用80端口

添加IP地址:
ifconfig eth0:0 10.0.0.12 up
ifconfig eth0:1 10.0.0.13 up


映射:
docker run -d -p 10.0.0.11:80:80 nginx:latest
docker run -d -p 10.0.0.12:80:80 nginx:latest
docker run -d -p 10.0.0.13:80:80 nginx:latest

4. 随机端口映射:

随机端口映射到容器的80
docker run -d -p ::80 nginx:latest
docker run -d -P nginx:latest


随机端口映射udp
     docker run -d -p ::80/udp nginx:latest


Docker数据卷管理

1. 宿主机挂容器
nginx 默认站点目录:/usr/share/nginx/html
-v /opt/xiaoniao:/usr/share/nginx/html #指定宿主机的目录挂载到容器的目录
[root@docker01 ~]# docker run -d -p 80:80 -v /opt/xiaoniao/:/usr/share/nginx/html nginx:latest


2.持久化
数据卷(文件或目录)
-v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)
-v src(宿主机的目录):dst(容器的目录)


3.数据卷容器 `--volumes-from`(跟某一个已经存在的容器挂载相同的卷)
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65c952f4a88b nginx:latest "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:80->80/tcp romantic_wozniak
[root@docker01 ~]# docker run -d -p 81:80 --volumes-from 65c952f4a88b nginx:latest
562625b3d4cb177e46c5a98d95b3884889686121fad3b9b903f8864c1fe80353
通过浏览器访问81端口;


4. 需求:
基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站点。


方案一:本地+容器
[root@docker01 ~]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
df41ae2b61d286521f3bf8a0bcf1df7865af1dcf78796f824a18a6f15711584a
[root@docker01 ~]# docker exec -it df41ae2b61d2 /bin/bash
root@df41ae2b61d2:/# cd /etc/nginx/conf.d/
root@df41ae2b61d2:/etc/nginx/conf.d# cat xiaoniao.conf
server {
listen 81;
server_name localhost;
root /opt;
location / {
index index.html index.htm;
}
}


方案二:将本地文件或目录挂载到容器的文件或目录中:
[root@docker01 xiaoniao]# docker run -d -p 82:80 -p 83:81 -v /opt/xiaoniao:/opt -v /opt/xiaoniao/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf nginx:latest
浏览器分别访问82和83端口进行测试




5. 创建卷:
docker run -d -p 80:80 -v test:/usr/share/nginx/html nginx:latest
   docker volume ls    查看卷


重启docker服务,容器全部退出的解决办法

方法一:
docker run --restart=always


方法二:
"live-restore": true docker server配置文件/etc/docker/daemon.json参考
{ "registry-mirrors": ["http://b7a9017d.m.daocloud.io"], "insecure-registries":["10.0.0.11:5000"], "live-restore": true }




文章转载自云原生数字化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论