Docker基础

1.Docker原理

1.1.Docker原理

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.2.DOcker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

2.Docker安装

2.1.安装环境

IP操作系统软件版本
192.168.220.30Centos7.419.03.8

2.2.docker安装

//安装网络源
[root@zzg yum.repos.d]# curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@zzg yum.repos.d]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@zzg yum.repos.d]# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@zzg yum.repos.d]# yum -y install epel-release

//安装依赖关系,更新container-selinux包
[root@zzg yum.repos.d]# yum update
[root@zzg yum.repos.d]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@zzg yum.repos.d]# yum -y install container-selinux

//设置yum源
[root@zzg yum.repos.d]# yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

//安装docker
[root@zzg yum.repos.d]# yum -y install docker-ce
[root@zzg yum.repos.d]# systemctl start docker

修改docker镜像源:
修改或新增 /etc/docker/daemon.json
# vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
systemctl restart docker.service

3.Docker实例

3.1Docker常用命令

//搜索镜像
docker search 镜像名称 

//下载镜像
docker pull 镜像

//查看已安装镜像列表
docker images

//删除镜像
docker rmi 镜像id

//运行镜像生成新的容器
docker run -d -it 镜像名称:版本号
eg: docker run -d -it -p 8080:8080 tomcat:7
  -p 端口映射,前者宿主机端口,后者容器端口,多个端口 -p 8080:8080 -p 9090:9090
  -d 后台运行容器
  -it 以交互模式运行容器 
eg: docker run -d -it -p 8080:8080 --name test -v /opt:/opt tomcat:7
  -v 数据挂载
 
//进入容器
docker exec -it 容器id /bin/bash

//容器的启动停止
docker start 容器id
docker stop 容器id 

//删除容器
docker rm 容器id

//查看容器日志
docker logs 容器id -f

//将容器配置文件copy到本地
docker cp 容器id:容器文件路径 本地文件夹

我们可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID) 
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

导出镜像
docker save image_name > /test.tar
导出容器
docker export 容器id/name >文件名.tar
导入容器
docker import test.tar test
导入镜像
docker load --input /test.tar
区别:

docker save保存的是镜像(image),docker export保存的是容器(container);

docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

3.2安装Nginx

  • 直接下载nginx镜像
//拉取最新镜像
[root@zzg yum.repos.d]# docker search apache
[root@zzg yum.repos.d]# docker pull httpd

//运行容器
[root@zzg yum.repos.d]# docker run -itd -p 8080:80 --name nginx-test nginx
39d074f46d0a870c04713d790b5a1a164dbf8bc7ac1114e25367d59b4e16893a
[root@zzg yum.repos.d]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
39d074f46d0a        nginx               "nginx -g 'daemon of…"   59 seconds ago      Up 57 seconds       0.0.0.0:8080->80/tcp   nginx-test
  • 验证,本地访问:http://192.168.220.30;8080

  • 在这里插入图片描述

  • 在Centos镜像里下载nginx

//拉取centos最新镜像
[root@zzg yum.repos.d]# docker pull centos

//运行容器
[root@zzg yum.repos.d]# docker run -itd --privileged=true -p 8000:80 --name nginx centos /usr/sbin/init
//--privileged 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
[root@zzg yum.repos.d]# docker exec -it 2ceebdbab3a7 /bin/bash

//下载nginx
[root@2ceebdbab3a7 /]# yum -y install nginx
[root@2ceebdbab3a7 /]# systemctl start nginx

  • 验证,本地访问:192.168.220.30:8000
    在这里插入图片描述

4.Docker网络类型

四种网络模式
我们在使用docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:

· host模式,使用–net=host指定。

· container模式,使用–net=container:NAME_or_ID指定。

· none模式,使用–net=none指定。

· bridge模式,使用–net=bridge指定,默认设置。

1 host模式(主机)

众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

2 container模式(容器)

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

3 none模式

这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

4 bridge模式(默认模式)
(他是通过网桥进行交互,会去生成一个子网络,子网络的每个子网络中的ip都是一个单独的网络,一个自己的IP段)

bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值