docker基础相关试题

docker相关试题

1、什么是虚拟化

  • 在物理计算机上虚拟化出多台逻辑计算机

2、Docker与虚拟机的区别

  • Docker
Docker:基于宿主机操作系统内核级别的虚拟化,启动秒级,更加轻量更高效,能够快速迁移,内存MB级别,容器与容器之间安全隔离,在Docker上能启动上千个容器
  • 虚拟机

    虚拟机:在宿主机操作系统内安装虚拟机管理程序,虚拟化出多个操作系统,再让软件运行在这些操作系统环境内。
    相比docker会占用更多的资源,能启动的虚拟机数量一般为几个或十数个(多了会卡,吃内存),启动级别为分钟级别,内存GB级别,虚拟机之间完全隔离,迁移能力一般
    

3、Docker中的三大概念

镜像,容器,仓库。

4、什么是镜像

镜像:容器运行的模板,是一个静态的概念。同时,也是一个只读模板,一个镜像可以创建出来很多个容器

5、什么是容器

容器:一个运行的实体,真正对外提供服务。一个容器在系统内就是一个进程。可以被启动, 删除, 停止, 每个容器相互隔。

6、什么是镜像仓库

仓库:存放镜像的仓库。需要的时候可以通过docker pull命令从仓库内拉取镜像到本地,也可以推送镜像进去

7、简要说明一下docker网络

  • Docker网络使用到 LInux 网络有关的技术 : 网络名称空间, Veth, Iptables, 网桥,路由
1. 网络名称空间
通过不同的网络名称空间实现网络资源隔离

2.Veth 设备对
通过 Veth 设备对实现不同网络名称空间之间的通信

3.IPtables
相当于一个防火墙,实现对流入流出数据的精确过滤

4.网桥
网桥相当于一个二层交换机(虚拟),可以把若干个网络网络接口连接起来, 从而实现报文的相互转发 

8、docker网络的原理有哪些

在宿主机虚拟一个 Docker 容器网桥(docker0),Docker 启动一个容器时会根据Docker 网桥的网段分配给容器一个 IP 地址,称为 Container-IP。

9、Linux网络隔离的方式

通过划分不同的命名空间,在这些命名空间都有独立的网络协议栈,彼此互不关联。

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

  • 通过网桥互联
网桥相当于一个二层交换机(虚拟),可以把若干个网络网络接口连接起来, 从而实现报文的相互转发 
  • 通过 Veth 设备对互联
通过 Veth 设备对实现不同网络名称空间之间的通信
  • 通过 Iptables 互联
相当于一个防火墙,实现对流入流出数据的精确过滤

11、Docker网络模式

  • Host 模式
  • Container 模式
  • None 模式
  • Bridge 模式

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

none:容器内仅有回环网络,无法对外连接。
bridge:多个容器连接到同一个网桥,通过网桥进行转发。
host:容器共享宿主机的网络名称空间,直接使用宿主机的端口。
container:容器不创建新的网络名称空间,直接使用另一个容器的网络名称空间。

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

  • 设置端口映射
  • “-p” 指定端口映射
  • “-P” 随机端口映射
docker run -dit -p 8888:80 nginx:1.19.2 sh
curl 127.0.0.1:8888   #出現 HTML 代码说明映射成功

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

docker run -d --network 共享的容器名 镜像名称或ID
  • 设置 container 网络模式
创建共享容器 "cont01"
[root@shawn ~]#docker run -dit --name cont01 busybox:latest

创建链接容器 "cont02", 并指定网络模式 "container"
[root@shawn ~]#docker run -dit --name cont02 --network "container:cont01" busybox:latest 

查看两个容器的 "ip", 发现一样
[root@shawn ~]#docker exec cont01 ip a
[root@shawn ~]#docker exec cont02 ip a

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

docker run -d --network none 镜像名称或ID
  • 通过创建不同的网络名称空间实现
[root@shawn ~]#ip netns add test1
[root@shawn ~]#ip netns add test2
[root@shawn ~]#ip netns list
test2
test1

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

  • 使用 bridge(网桥)模式实现
将多个容器连到同一个网桥。
docker run --network bridge 

17、创建一个容器

  • “run” 命令
docker run  -d 镜像名称或ID

#示例:
docker run -d busybox:latest

18、随机映射端口

  • “-P” 参数
docker run  -d -P 镜像名称或ID

#示例
docker run -d -P busybox:latest

19、固定映射端口

  • “-p” 参数
docker run  -d -p 8888:80 镜像名称或ID

# 示例:
docker run -d -p 8888:80 busybox:latest

20、挂载存储卷

  • “-v” 参数
docker run -d -v 本地文件路径:容器文件路径 镜像名称或ID

#示例
docker run -d -v /root/test01:/usr/share/nginx/html nginx:1.19.2

21、为容器设置一个名字

  • “–name” 参数
docker run -d --name 容器名称 镜像名称或ID

# 示例
docker run -d --name test01 busybox:latesr

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

  • “-d” 参数
docker run  -d  镜像名称或ID

#示例
docker run -d --name test1 nginx:latest

23、构建一个Django容器

1、在宿主机上安装好python3以及Django。

yum install -y python3 
pip3 install django -i https://mirrors.aliyun.com/pypi/simple --trusted-host aliyun.com/pypi/simple

2、创建一个app项目

django-admin startproject app
cd app
django-admin startapp application

3、修改settings.py文件。

cd app
[root@localhost app ]# vim settings.py 

。。。省略行。。。
# 在中括号内插入'*'
ALLOWED_HOSTS = ['*']

。。。省略行。。。

# 将以下几行注释掉。
DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': BASE_DIR / 'db.sqlite3',
#    }
}
。。。省略行。。。

4、在宿主机系统上测试运行。

cd ..
python3 manage.py runserver 0.0.0.0:8000

5、编辑Dockerfile文件

[root@localhost ~ ]# vim Dockerfile

# 基于python3.6构建Django
FROM python:3.6
# 安装Django
RUN pip3 install django==2.2.2 -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com/pypi/simple/
# 将宿主机生成的app目录复制到镜像内。
COPY app /root/
# 镜像启动为容器后,在容器内启动Django。
CMD cd /root && python3 manage.py runserver 0.0.0.0:8000

6、构建镜像。

docker build -t python3/django:v1 .

7、启动镜像,指定映射端口。

docker run -dit -p 3800:8000 python3/django:v1

8、测试可正常访问。

[root@localhost ~ ]# curl 127.0.0.1:3800

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Django: the Web framework for perfectionists with deadlines.</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" href="/stat
        。。。省略行。。。

24、构建一个NGINX容器

1、在宿主机上配置好nginx的yum源文件。

设置yum源,创建一个nginx.repo文件。
vim 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

2、编辑Dockerfile文件。

[root@localhost ~ ]# vim Dockerfile

# 指定依赖镜像
FROM centos:7

# 安装nginx基础环境。
RUN yum install -y  yum-utils
# 将yum源文件复制到镜像内。
ADD nginx.repo /etc/yum.repos.d/
# 建立yum元数据缓存
RUN yum makecache
# 安装nginx
RUN yum install -y nginx

# 容器启动时启动nginx
CMD nginx -g 'daemon off;'

3、构建镜像

docker build -t centos7/nginx:v1 .

4、运行镜像为容器。

docker run -d -p 8888:80 --name my_nginx centos7/nginx:v1

5、测试是否能访问。

[root@localhost ~ ]# curl 127.0.0.1:8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
        。。。省略行。。。

25、使用NGINX代理Django

1、本地创建default.conf文件。

vim default.conf
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://192.168.112.129:3800/;
        index  index.html index.htm;
    }

}

2、将本地文件复制到容器中。

docker cp default.conf my_nginx:/etc/nginx/conf.d/

3、重启容器。

docker restart my_nginx

4、测试访问nginx

[root@localhost ~ ]# curl 127.0.0.1:8888

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Django: the Web framework for perfectionists with deadlines.</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" href="/static/admin/css/fonts.css">
        <style type="text/css">

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

1、登录仓库。

docker login --username=sepzhan registry.cn-shanghai.aliyuncs.com

registry.cn-hangzhou.aliyuncs.com/dock_tst/test_cr:[镜像版本号]

2、更改镜像名。

# django改为v1
docker tag python3_django:v1 registry.cn-shanghai.aliyuncs.com/sepzhan/zmc:v1
# nginx改为v2
docker tag centos7/nginx:v1 registry.cn-shanghai.aliyuncs.com/sepzhan/zmc:v2

3、推送镜像至仓库。

# 推送Django镜像
docker push registry.cn-shanghai.aliyuncs.com/sepzhan/zmc:v1
# 推送nginx镜像
docker push registry.cn-shanghai.aliyuncs.com/sepzhan/zmc:v2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾维斯Echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值