Docker基本概念

1、什么是虚拟化

虚拟的环境并不在真实的硬件上,而是虚拟出一套硬件
在一台物理机上,可以通过虚拟化技术,虚拟出很多虚拟机

2、Docker与虚拟机的区别

Docker
    启动速度快
    占用系统资源少
    容器之间隔离


虚拟机
    启动速度慢
    占用系统资源多
    虚拟机之间完全隔离

3、Docker中的三大概念

镜像、容器、 仓库

4、什么是镜像

启动容器的模板

5、什么是容器

对外提供服务的实例

6、什么是镜像仓库

存放镜像的仓库

7、简要说明一下docker网络

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

8、docker网络的原理有哪些

Docker 本身的技术依赖于 Linux 内核虚拟化技术的发展
所以 Docker 对 Linux 内核的特性有很强的依赖
其中 Docker 使用到的与 Linux 网络有关的技术分别有:网络名称空间、Veth、网桥、Iptables、路由

9、Linux网络隔离的方式

因为 命名空间的存在
这些独立的协议栈被隔离到不同的命名空间中
处于不同的命名空间的网络协议栈是完全隔离的,彼此之间无法进行网络通信,就好像两个“平行宇宙”

10、Linux不同网络之间互联的方式

Veth设备:只能一对一
网桥:支持多对多
Iptables:内核级别的网络转发(但是规则比较复杂)

11、Docker网络模式

host 模式
none 模式
container 模式
bridge 模式(默认)

12、Docker网络模式的实现原理

host:共享根命名空间的网络
none:只提供本地回环网络127.0.0.1
container:共享某个容器的网络
bridge:所有容器连接同一个网桥,通过网桥来进行转发

13、怎么实现使用在宿主主机使用127.0.0.1访问容器

# 在容器运行的时候 映射端口 网络模式不指定 就使用默认的bridge

docker run -dit -p 80:80 --name nginx01 nginx:latest

14、怎么共享一个容器的网络

# 使用 container 网络模式

docker run -itd --name test01 nginx
docker run -itd --name test02 --network "container:test01" nginx

15、怎么实现一个容器完全的网络隔离

# 使用 none 网络模式

docker run -itd --name test01 --network none nginx

16、怎么实现多对多网络互联

# 使用 bridge 网络模式

docker run -itd --name test01 --network bridge busybox
docker run -itd --name test02 --network bridge busybox
docker run -itd --name test03 --network bridge busybox

17、创建一个容器

docker run -d busybox

18、随机映射端口

# -P

docker run -P busybox

19、固定映射端口

# -p [宿主机的端口号]:[容器内部的端口号]

docker run -p 80:80 nginx

20、挂载存储卷

# -v [宿主机的路径]:[容器内的路径]


docker run -v /home/darker:/data nginx

21、为容器设置一个名字

# --name [自定义容器名]

docker run --name nginx01 nginx

22、以守护进程方式运行一个容器

# -d

docker run -d nginx

23、构建一个Django容器

创建 Dockerfile
vim Dockerfile
Dockerfile 内容
# 1.指定基础镜像
FROM python:3.6.8

# 2.安装django
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/

# 3.创建1个django项目
RUN django-admin startproject blog
RUN cd blog && python3 manage.py startapp app01

# 4.设置启动命令
CMD cd /root && python3 manage.py runserver 0.0.0.0:8000

# 5.暴露8000端口
EXPOSE 8000
构建镜像命令
docker build -t django:v1 .
启动容器
docker run -dit -p 8000:8000 --name django01 django:v1 bash

24、构建一个NGINX容器

创建 nginx.repo
vim nginx.repo
nginx.repo 内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
创建 Dockerfile
vim Dockerfile
Dockerfile 内容
# 设置基础镜像
FROM centos

# 安装wget
RUN yum install wget -y

# 换源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
RUN cd /etc/yum.repos.d && wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
RUN mv /etc/yum.repos.d/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

# 添加nginx源的文件
ADD nginx.repo /etc/yum.repos.d/ 

# 刷新yum缓存
RUN yum makecache

# 安装yum工具
RUN yum install yum-utils -y

# 安装Nginx
RUN yum install nginx -y

# 添加配置文件
ADD default.conf /etc/nginx/conf.d/

# 设置启动命令
CMD nginx -g 'daemon off;'
构建镜像命令
docker build -t nginx:v1 .
启动容器
docker run -dit -p 80:80 --name nginx01 nginx:v1 bash

25、使用NGINX代理Django

创建 default.conf
vim default.conf
default.conf 内容
upstream django {
    server django:8000;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://django;
        index index.html index.htm;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

26、将以上镜像上传到镜像仓库

# 1.登录阿里云Docker Registry
docker login --username=用户名 [仓库URL] 


# 2.为镜像添加标签(标记版本)
docker tag [镜像ID] [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
# 实例
docker tag 74d107221092 registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1


# 3.将本地镜像推送到Registry
docker push [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
# 实例
docker push registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1

1、什么是虚拟化

虚拟的环境并不在真实的硬件上,而是虚拟出一套硬件
在一台物理机上,可以通过虚拟化技术,虚拟出很多虚拟机
 
Text
 

2、Docker与虚拟机的区别

Docker
    启动速度快
    占用系统资源少
    容器之间隔离


虚拟机
    启动速度慢
    占用系统资源多
    虚拟机之间完全隔离
 
Text
 

3、Docker中的三大概念

镜像、容器、 仓库
 
Text
 

4、什么是镜像

启动容器的模板
 
Text
 

5、什么是容器

对外提供服务的实例
 
Text
 

6、什么是镜像仓库

存放镜像的仓库
 
Text
 

7、简要说明一下docker网络

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
 
Text
 

8、docker网络的原理有哪些

Docker 本身的技术依赖于 Linux 内核虚拟化技术的发展
所以 Docker 对 Linux 内核的特性有很强的依赖
其中 Docker 使用到的与 Linux 网络有关的技术分别有:网络名称空间、Veth、网桥、Iptables、路由
 
Text
 

9、Linux网络隔离的方式

因为 命名空间的存在
这些独立的协议栈被隔离到不同的命名空间中
处于不同的命名空间的网络协议栈是完全隔离的,彼此之间无法进行网络通信,就好像两个“平行宇宙”
 
Text
 

10、Linux不同网络之间互联的方式

Veth设备:只能一对一
网桥:支持多对多
Iptables:内核级别的网络转发(但是规则比较复杂)
 
Text
 

11、Docker网络模式

host 模式
none 模式
container 模式
bridge 模式(默认)
 
Text
 

12、Docker网络模式的实现原理

host:共享根命名空间的网络
none:只提供本地回环网络127.0.0.1
container:共享某个容器的网络
bridge:所有容器连接同一个网桥,通过网桥来进行转发
 
Text
 

13、怎么实现使用在宿主主机使用127.0.0.1访问容器

# 在容器运行的时候 映射端口 网络模式不指定 就使用默认的bridge

docker run -dit -p 80:80 --name nginx01 nginx:latest
 
Bash
 

14、怎么共享一个容器的网络

# 使用 container 网络模式

docker run -itd --name test01 nginx
docker run -itd --name test02 --network "container:test01" nginx
 
Bash
 

15、怎么实现一个容器完全的网络隔离

# 使用 none 网络模式

docker run -itd --name test01 --network none nginx
 
Bash
 

16、怎么实现多对多网络互联

# 使用 bridge 网络模式

docker run -itd --name test01 --network bridge busybox
docker run -itd --name test02 --network bridge busybox
docker run -itd --name test03 --network bridge busybox
 
Bash
 

17、创建一个容器

docker run busybox
 
Bash
 

18、随机映射端口

# -P

docker run -P busybox
 
Text
 

19、固定映射端口

# -p [宿主机的端口号]:[容器内部的端口号]

docker run -p 80:80 nginx
 
Bash
 

20、挂载存储卷

# -v [宿主机的路径]:[容器内的路径]


docker run -v /home/darker:/data nginx
 
Bash
 

21、为容器设置一个名字

# --name [自定义容器名]

docker run --name nginx01 nginx
 
Bash
 

22、以守护进程方式运行一个容器

# -d

docker run -d nginx
 
Bash
 

23、构建一个Django容器

创建 Dockerfile
vim Dockerfile
 
Bash
Dockerfile 内容
# 1.指定基础镜像
FROM python:3.6.8

# 2.安装django
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/

# 3.创建1个django项目
RUN django-admin startproject blog
RUN cd blog && python3 manage.py startapp app01

# 4.设置启动命令
CMD cd /root && python3 manage.py runserver 0.0.0.0:8000

# 5.暴露8000端口
EXPOSE 8000
 
Dockerfile
构建镜像命令
docker build -t django:v1 .
 
Bash
启动容器
docker run -dit -p 8000:8000 --name django01 django:v1 bash
 
Bash
 

24、构建一个NGINX容器

创建 nginx.repo
vim nginx.repo
 
Bash
nginx.repo 内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
 
nginx
创建 Dockerfile
vim Dockerfile
 
Bash
Dockerfile 内容
# 设置基础镜像
FROM centos

# 安装wget
RUN yum install wget -y

# 换源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
RUN cd /etc/yum.repos.d && wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
RUN mv /etc/yum.repos.d/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo

# 添加nginx源的文件
ADD nginx.repo /etc/yum.repos.d/ 

# 刷新yum缓存
RUN yum makecache

# 安装yum工具
RUN yum install yum-utils -y

# 安装Nginx
RUN yum install nginx -y

# 添加配置文件
ADD default.conf /etc/nginx/conf.d/

# 设置启动命令
CMD nginx -g 'daemon off;'
 
Dockerfile
构建镜像命令
docker build -t nginx:v1 .
 
Bash
启动容器
docker run -dit -p 80:80 --name nginx01 nginx:v1 bash
 
Bash
 

25、使用NGINX代理Django

创建 default.conf
vim default.conf
 
Bash
default.conf 内容
upstream django {
    server django:8000;
}

server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://django;
        index index.html index.htm;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
 
nginx
 

26、将以上镜像上传到镜像仓库

# 1.登录阿里云Docker Registry
docker login --username=用户名 [仓库URL] 


# 2.为镜像添加标签(标记版本)
docker tag [镜像ID] [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
# 实例
docker tag 74d107221092 registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1


# 3.将本地镜像推送到Registry
docker push [仓库URL]/[命名空间]/[仓库名称]:[镜像版本号]
# 实例
docker push registry.cn-hangzhou.aliyuncs.com/darker-x/common_software:redis_v1
原文地址:https://www.cnblogs.com/ltyc/p/14093634.html