Docker介绍

1 什么是容器?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了

2 容器的前世

FreeBASE jail   ------> Linux vserver
chroot ------> 完整的根文件系统(FHS)标准的
namespaces ------> UTS Mount IPC PID user network
cgroup ------> 资源的分配和监控 通过比较复杂的代码开发的过程,调用以上三项技术
实现容器的创建 ----> 管理 ---->销毁

3 传统虚拟化技术和容器对比

4 容器的今生?

实现隔离能力!
LXC (LinuXContainer) 对于原有的常用功能进行了封装,方便我们做容器的生命周期
-----> Docker (dotcloud)

Docker的安装

系统版本:centos7.6
docker版本:Docker version 17.06.2-ce, build cec0b72 安装教程
http://www.mamicode.com/info-detail-2835106.html 1 yum源准备
#curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 2 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r 3 安装docker-ce
yum install -y docker-ce
或者指定docker版本:
yum install -y --setopt=obsoletes=0 docker-ce-17.06.2.ce-1.el7.centos.x86_64 docker-ce-selinux-17.06.2.ce-1.el7.centos.noarch 4 启动Docker服务
systemctl daemon-reload
systemctl restart docker
docker version
docker info 5 配置镜像加速(需要自己进入阿里云注册然后加速)
阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yown2gka.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker 或者:
vim /etc/docker/daemon.json {
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}

Doocker体系结构

Docker镜像的基础管理

1  获取镜像
基础镜像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5.1804
docker pull nginx 2 镜像基本查看
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.8 82f3b5f3c58f 4 months ago 195 MB
centos 6.9 2199b8eb8390 4 months ago 195 MB
centos 7.5.1804 cf49811e3cdb 4 months ago 200 MB
centos 7.6.1810 f1cb7c7d58b7 4 months ago 202 MB
oldguo/centos_sshd v1.0
oldguo/centos_sshd v2.0
oldguo/centos_sshd v3.0 标识镜像唯一性的方法:
2.1. REPOSITORY:TAG
centos:7.5.1804 2.2. IMAGE ID (sha256:64位的号码,默认只截取12位)
82f3b5f3c58 [root@docker /]# docker image ls --no-trunc 3 镜像详细信息查看
[root@docker /]# docker image inspect centos:6.9
[root@docker /]# docker image inspect 82f3b5f3c58f 4 只查看镜像ID
[root@docker ~]# docker image ls -q 5 镜像的导入和导出
[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1 6 镜像的删除
[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`

容器的管理

1 运行第一个容器

1.1 交互式的容器
[root@docker ~]# docker container run -it 9f38484d220f
[root@docker /]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d1ef5a6ecfc 9f38484d220f "/bin/bash" 5 minutes ago Up 5 minutes nervous_alle CONTAINER ID : 容器的唯一号码(自动生成的)
NAMES : 容器的名字(可以自动,也可以手工指定) 例子: 手工指定容器名启动
[root@docker /]# docker container run -it --name="oldguo_cent76" 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef45b19d8c7b 9f38484d220f "/bin/bash" About a minute ago Exited (0) 5 seconds ago oldguo_cent76
4d1ef5a6ecfc 9f38484d220f "/bin/bash" 9 minutes ago Up 9 minutes nervous_allen STATUS : 容器的运行状态 ( Exited , Up) 1.2 守护式容器
[root@docker /]# docker run -d --name="oldguo_nginx" nginx:1.14
查询容器的详细信息:
[root@docker /]# docker container inspect oldguo_nginx 1.3 容器的应用场景
交互式的容器: 工具类: 开发,测试,临时性的任务()
[root@docker ~]# docker container run -it --name="oldguo_cent76" --rm 9f38484d220f 守护式容器: 网络服务
[root@docker /]# docker run -d -p 8080:80 --name="oldguo_nginx_80" nginx:1.14 1.4 容器的启动\关闭\连接
守护式容器的关闭和启动
[root@docker /]# docker container stop oldguo_nginx_80
[root@docker /]# docker container start oldguo_nginx_80 交互式的容器的关闭和启动
[root@docker /]# docker container stop nervous_allen
[root@docker /]# docker container start -i nervous_allen 容器的连接方法:
[root@docker /]# docker container attach nervous_allen 子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
[root@docker ~]# docker container exec -it nervous_allen /bin/bash 容器的后台及前台运行:
1. ctrl + P, Q
attach 调用到前台
2. 死循环
3. 让程序前台一直允许(夯在前台)
制作守护式容器时,常用的方法

2 docker容器的网络访问

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口:32768-60999)
-p hostPort:containerPort/udp
-p 81:80 –p 443:443 两个服务
随机映射
docker run -P 80(随机端口) [root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14 *****
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14 *****
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

3 容器的其他管理

# 查看所有容器的CONTAINER ID (不管是up 的还是exited的都会显示)
docker ps -a -q
等价于:
docker container ls -a -q # 查看正在运行的容器里的进程
[root@docker ~]# docker top ba9143bcaf74
等价于:
[root@docker ~]# docker container top ba9143bcaf74 查看日志:
[root@oldboy docker]# docker logs 213e54a2aefa
[root@oldboy docker]# docker logs -tf alnk_nginx8080 [root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf --tail 10 testxx
[root@oldboy docker]# docker logs -tf --tail 0 testxx

4 小结

1. 镜像类:
docker image
search
pull
ls *****
inspect *****
rm ****
save
load 2. 容器类
docker container
run *****
start ****
stop ****
restart
kill
attach
exec *****
ls *****
top ****
logs
inspect ****

5 docker的数据卷实现持久化存储

1. 手工交互数据:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./ 2. Volume实现宿主机和容器的数据共享
作用: 数据持久化
[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx 3. 例子: 开启两个nginx容器(90,91),共同挂载一个数据卷,实现静态资源共享
[root@docker html]# docker run -d --name="nginx_4" -p 84:80 -v /root/html/:/usr/share/nginx/html nginx
[root@docker html]# docker run -d --name="nginx_5" -p 85:80 -v /root/html/:/usr/share/nginx/html nginx
[root@docker html]# pwd
/root/html
[root@docker html]# ll
total 4
-rw-r--r-- 1 root root 9 Jan 3 17:15 index.html
[root@docker html]# echo xxxx >index.html
# web界面访问 IP:85 4. 数据卷容器
(1)宿主机模拟数据目录
mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt (2)启动数据卷容器
docker run -it --name "nginx_volumes" -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q (3)使用数据卷容器
docker run -d -p 8085:80 --volumes-from nginx_volumes --name "n8085" nginx
docker run -d -p 8086:80 --volumes-from nginx_volumes --name "n8086" nginx 验证
[root@docker opt]# docker container exec -it n8086 /bin/bash
root@81a12c677b02:/# ls /opt/a/a.txt
/opt/a/a.txt
root@81a12c677b02:/# 作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理

docker-01的更多相关文章

  1. Docker 01 Introduction

    Docker的组成: Docker Engine,一个轻量级.强大的开源容器虚拟化平台,使用包含了工作流的虚拟化技术,帮助用户建立.并容器化一个应用. Docker Hub,提供的一个SaaS服务,用 ...

  2. Docker 01 - CentOS 7 中安装 Docker 的详细步骤

    目录 1 初识 Docker 1.1 Docker 原理简介 1.2 Docker 核心概念 2 安装 Docker 2.1 查看系统内核版本 2.2 更新 yum 包 2.3 安装软件包 2.4 向 ...

  3. Docker 01 概述

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  4. Docker 02 - 向 Docker 的 Tomcat 镜像中部署 Web 应用

    目录 1 下载 Docker 镜像 2 部署Web项目 2.1 通过Dockerfile自定义项目镜像 2.2 启动自定义镜像, 生成一个容器 2.3 另一种启动方式: 交互式启动 3 (附) 向镜像 ...

  5. 01: docker 基本使用

    1.1 docker基础 1.docker与虚拟机比较 2.docker版本 1. 社区版(Community Edition, CE) 2. 企业版(Enterprise Edition, EE) ...

  6. Docker系列01—Docker 基础入门

    一.初识Docker和容器 1.1 什么是docker 容纳其他物品的工具,可以部分或完全封闭,被用于容纳.存储.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 容器? 容器就是在隔离的环 ...

  7. Docker入门01——Image

    1.获取镜像 2.列出镜像 3.创建镜像 3.1 修改已有镜像 3.2 使用Dockerfile创建镜像 创建Dickerfile文件 使用build来创建镜像 使用新创建的镜像来启动容器 4.移除镜 ...

  8. docker常用指令01

    1.进入交互式界面 docker run (--name=xx命名)-i -t ubuntu /bin/bash docker run --name=con1 -i -t ubuntu /bin/ba ...

  9. Docker系列01—容器的发展历程---Docker的生态圈

    本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...

  10. 【docker 入门 - 01】- Docker 在 Centos7 上安装与测试

    一.学习文档 官网网站: https://www.docker.com 中文网站:http://www.docker-cn.com 官方安装文档:https://docs.docker.com/ins ...

随机推荐

  1. Rsync+Sersync数据实时同步(双向)

    Rsync+Sersync数据实时同步(双向) 服务介绍 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.se ...

  2. XCTF reverse maze

    一.查壳 二.拖入ida64,静态调试,找到主函数F5反编译 二.1 思路分析(逆向是真的费时间,每个函数都要分析过去): 1.发现每个if最终都会进入LABEL-15 点进去,看看这个函数是干啥的. ...

  3. SA20225394 舒蔚 高级软件工程实验总结

    [实验]: 一.编程神器Visual Studio Code 配置好Visual Studio Code这一强大而又轻量的编辑器.其中有版本控制+代码补全+自动加载依赖,并且可以根据自己的需要添加插件 ...

  4. 我的Linux发行版选择

    Ubuntu CentOS Debian Fedora Slackware Mint Xubuntu Arch OpenSUSE Red Hat Slackel PureOS Mageia PCLin ...

  5. 「CF547D」 Mike and Fish

    「CF547D」 Mike and Fish 传送门 介绍三种做法. \(\texttt{Solution 1}\) 上下界网络流 我们将每一行.每一列看成一个点. 两种颜色的数量最多相差 \(1\) ...

  6. vs2013:asp.net网站发布

    1."生成"菜单"生成网站" 2."发布网站" 3.配置文件--自定义,名称 4.发布方法:文件系统,确定目标位置(另外的) 5.配置选择r ...

  7. navicate for mysql命令中输入中文报错

    insert into xsxx(name,xb) values('李四','男') 错误提示: [SQL]insert into xsxx3(name,xb) values('李四','男') [E ...

  8. Java基础00-网络编程29

    1. 网络编程入门 1.1 网络编程概述 1.2 网络编程三要素 1.3 IP地址 在命令提示符中使用 1.4 InetAddress的使用 代码示例: public class InetAddres ...

  9. Day2基本数据类型 字节 和类型转换

    Java基础语法 注释 1.单行注释:// 加内容 2.多行注释:/* 多行注释 */ 3.文档注释: /** * * */ 有趣的注释 标识符 关键字 基本数据类型 八大基本数据类型 //整数​in ...

  10. Swift-为什么String转换Int的结果是nil

    摘要 知其然,更要知其所以然.前段时间用 String 转换 Int 处理时,发现一种情况返回 nil,就换成 String 转换 Double 的方式处理.今天就要来看看这种返回 nil 的情况是怎 ...