Docker快速入门——容器的“魅力”


Dockers概念和安装

为什么使用容器?

1.上线流程繁琐

开发->测试->申请资源->审批->部署->测试等环节

2.资源利用率低

普遍服务器利用率低,造成过多浪费

3.扩容/缩容不及时

业务高峰期扩容流程繁琐,上线不及时

4.服务器环境臃肿

服务器越来越臃肿,对维护,迁移带来困难

5.环境不一致

容器与虚拟化的区别
ContainerVM
启动速度秒级分钟级
运行性能接近原生5%左右损耗
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级系统级(更彻底)
操作系统主要支持linux几乎所有
封装程度只打包项目代码和依赖关系,共享宿主机内核完整的操作系统

容器:

1.容器提供一个基本的独立环境,实现容器隔离,资源限制

2.主要解决应用层面问题,应用快速部署,高效管理

虚拟机:

1.提高服务器资源利用率

2.提供一个完全隔离的环境

Docker是什么
  • 使用最广泛的开源容器引擎
  • 一种操作系统级的虚拟化技术
  • 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
  • 一个简单的应用程序打包工具
Docker应用场景
  • 应用程序打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品
Docker基本组成
Dockers安装

# 安装前建议关团selinux和firewalld

安装依赖包

yum install -y yum-utils

添加Docker软件包源

yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

安装Docker CE

yum install -y docker-ce

启动Docker服务并设置开机启动

systemctl start docker
systemctl enable docker

https://docs.docker.com/engine/install/centos

官方文档:https://docs.docker.com

阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

配置镜像加速器:

vim /etc/docker/daemon.json

{

"registry-mirrors":["https://b9pmyelo.mirror.aliyuncs.com"]

}
systemctl restart docker   #重启docker服务

Docker镜像管理

镜像是什么?
  • 一个分层存储的文件,不是一个单一的文件
  • 一个软件的环境
  • 一个镜像可以创建N个容器
  • 一种标准化的交付
  • 一个不包含Linux内核而又精简的Linux操作系统
常用管理命令

命令格式:

docker image [COMMAND]
指令描述
ls列出镜像
build构建镜像来自Dockerfile
history查看镜像历史
inspect显示一个或多个镜像详细信息
pull从镜像仓库拉取镜像
push推送一个镜像到镜像库
rm移除一个或多个镜像
prune移除没有被标记或者没有被任何容器引用的镜像
tag创建一个引用源镜像标记目标镜像
save保存一个或多个镜像到一个tar归档文件
load加载镜像来自tar归档或标准输入

命令格式:

docker container [COMMAND]
选项描述
exec在运行容器中执行命令
commit创建一个新镜像来自一个容器
cp拷贝文件或文件夹到一个容器
logs获取一个容器日志
ports列出或指定容器端口映射
stats显示容器资源使用统计
stop/start/restart停止/启动/重新启动一个或多个容器
rm删除一个或多个容器
docker ps
-a 查看所有容器,包含退出
-q 列出所有的容器ID

删除所有容器

docker rm -f $(docker ps -qa)
创建容器常用选项

命令格式:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
选项描述
-i, –interactive交互式
-t,–tty分配一个伪终端
-d,–detach运行容器到后台
-e,–env设置环境变量
-p,–publish list发布容器端口到主机
-P,–publish-all发布容器所有EXPOSE的端口到宿主机随机端口
–name指定容器名称
-h,–hostname设置容器主机名
–ip指定容器IP,只能用于自定义网络
–network连接容器到一个网络
-v,–volume list–mount mount(新方式)将文件系统附加到容器
–restart容器退出时重启策略,默认no,可选值:[ always | on-failure ]
-m,–memory容器可以使用的最大内存量
–memory-swap允许交换磁盘的内存量
–memory-swappiness容器使用swap分区交换的百分比(0-100,默认为-1)
–oom-kill-disable禁用OOM Killer
–cpus可以使用的CPU数量
–cpuset-cpus限制容器使用特定的CPU核心,如(-3,0,1)
–cpu-sharesCPU共享(相对权重)

Dokcer容器管理

容器数据持久化

Docker提供2种方式将数据从宿主机挂载到容器中:

  • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
  • bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
volumes示例:

1、创建数据卷
docker volume create nginx-vol
docker volume ls
docker volume inspect nginx-vol

2、使用数据卷
docker run -d --name=nginx-test --mount src=nginxvol:/usr/share/nginx/html nginx
bind mounts示例:

1、挂载宿主机目录到容器
docker run -d --name=nginx-test --mount  type=bind,src=/app/wwroot,dst=/usr/share/nginx/html nginx
docker run -d --name=nginx-test -V  /app/wwwroot:/usr/share/nginx/html nginx
容器网络
  • veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出。 用于解决网络命名空间之间隔离。
  • docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信。

Dockerfile构建镜像

Dockerfile概述

Docker通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文件,由一条一条的指令组成。

Dockerfile常用指令
指令描述
FROM构建新镜像是基于哪个镜像
LABEL标签
RUN构建镜像时运行的Shell命令
COPY拷贝文件或目录到镜像中
ADD解压压缩包并拷贝
ENV设置环境变量
USER为RUN,CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE声明容器运行的服务端口
WORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录
CMD运行容器时默认执行,如果有多个CMD指令,最后一个生效

例:nginx

FROM centos:7
RUN yum -y install epel-release &&\
yum -y install nginx
CMD ["nginx","-g","daemon off;"]

构建镜像

docker build
-t,--tag list #镜像名称
-f,--file string #指定Dockerfile文件位置
构建Nginx镜像
FROM centos:7
LABEL maintainer www.ctnrs.com

RUN yum install -y gcc gcc-c++ make \

openssl-devel pcre-devel gd-devel\

iproute net-tools telnet wget curl &&\

yum clean all &&\

rm -rf /var/cache/yum/*

ADD nginx-1.15.5.targz/

RUN cd nginx-1.15.5 && \

./configure --prefix=/usr/local/nginx \

--with-http ssl module \

--with-http stub status module &&\

make -j4 && make install &&

mkdir /usr/local/nginx/conf/vhost &&

cd/&& rm -rfnginx*&&\

In -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/nginx/sbin

COPY nginx.conf /usr/local/nginx/conf/nginx.conf

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ['nginx". "-g"."daemon off;"]
构建Tomcat镜像
FROM centos:7
MAINTAINER www.ctnrs.com

ENV VERSION=8.5.43

RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \

yum clean all &&\

rm -rf /var/cache/yum/*

ADD apache-tomcat-${VERSlON}.tar.gz /usr/local/

RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \

sed -i'1a JAVA OPTS="-Djava.security.egd=file:/dev/./urandom"'usr/local/tomcat/bin/catalina.sh &&\

ln -sf/usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080

CMD ["catalina.sh", "run"]

Harbor镜像仓库搭建与使用

Harbor概述

Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。

官方:https://goharbor.io/

Github:https://github.com/goharbor/harbor

Harbor部署
先决条件

服务器硬件配置:

  • 最低要求:CPU2核/内存4G/硬盘40GB
  • 推荐:CPU4核/内存8G/硬盘160GB

软件:

  • Docker CE 17.06版本+
  • Docker Compose 1.18版本+

Harbor安装有2种方式:

  • 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大
Harbor部署

1、先安装Docker和Docker Compose

https://github.com/docker/compose/releases

2、部署Harbor HTTP

tar -zxvf harbor-offline-installer-v2.0.0.tgz
cd harbor
cp harboryml.tmpl harbor.yml
vi harbor.yml

hostname: #本机的fqdn

https: #先注释https相关配置

harbor admin password: admin
./prepare
 ./install.sh

3.配置http镜像仓库可信任

vi /etc/docker/daemon.json

{

"insecure-registries":["本机的fqdn或IP"]

}
systemctl restart docker
基本使用

打标签

docker tag centos:7 reg.ctnrs.com/library/centos:7

上传

docker push reg.ctnrs.com/library/centos:7

下载

docker pull reg.ctnrs.com/library/centos:7
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇