Docker容器

docker简介和部署

本文主要是介绍docker简介和部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

docker简介和部署

  • docker是什么?
  • docker和虚拟机的区别?
  • 为社么需要容器技术?
  • docker核心目的?
  • docker三要素
  • 优势
  • 安装
  • 设置阿里云镜像源
  • 安装docker-ce社区版
  • 设置镜像加速
  • 网络优化
  • 相关命令查看
    • 查看docker版本
    • 用于显示docker系统级信息
  • Docker镜像相关操作
    • 运行镜像
    • 删除镜像
    • 搜索镜像用search
  • 下载镜像用pull
    • 获取镜像信息
  • 添加镜像标签
    • 镜像导出
    • 镜像导入
  • docker命令—容器操作
    • 创建容器
    • 启动容器start
    • 停止容器
    • 容器持续后台运行
    • 进入容器
  • docker网络模式
    • HOST模式![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=d227f438b41c45e1a9ce582b2fd7b1da.png?,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6ams6ZOD6Jav6ICB5ZOl,size_20,color_FFFFFF,t_70,g_se,x_16)
    • container 模式
    • None模式
    • Bridge模式(默认)
    • docker四种网络模式特点

docker是什么?

是轻量级的虚拟机,是一个引擎
是linux容器里运行应用的开源工具。
是基于容器技术的轻量级虚拟化解决方案,docker是由容器引擎,把linux的cgroup、namespace等容器底层技术进行完美的封装、并抽象为用户提供从创建和管理容器的便捷界面(Cli、api等)C/S

docker和虚拟机的区别?

资源利用率docker更高,虚拟化耗资源
不需要镜像,只需要封装一个建议的操作系统

为社么需要容器技术?

因为随着技术的发展,虚拟化技术开销过大,运行一个脚本还等安装一个系统才行,而docker不需要虚拟硬件资源,直接使用容器引擎,速度快。

docker核心目的?

隔离应用:其实就是资源的隔离
要实现以下6中名称空间隔离才能算是真正的完全隔离应用。
mount 文件系统挂载点-》一个文件系统内,不能重复挂载一个指定的目录
user 操作进程的用户和用户组得
pid 进程标号要
uts 主机名和主机域
ipc 信号量、消息队列、共享内存(不同的应用调用不同的信号量、消息队列、共享内存)
net 网络设备、网络协议栈、端口等

docker三要素

① 镜像:模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
②容器(docker container):基于镜像的一中运行时状态
③仓库(docker reqistry):存放image镜像模板;
仓库分类:共有仓库(docker hub)
私有仓库(registry harbor)

优势

docker引擎统一基础设施环境:docker环境——>image——>封装一个简易的操作系统(3.0+G)
docker引擎统一了封装应用(装箱/封装-类比于集装箱)方式:docker镜像——>image
docker 引擎统一了运行时环境:docker容器——>基于镜像——>运行为容器(可运行的环境)实现了一次构建、多次、多处使用

安装

// 
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114

[root@localhost ~]# yum install -y yum-utils device-mapper=persistent-data lvm2

在这里插入图片描述

设置阿里云镜像源

//
[root@localhost etc]# cd yum.repos.d
[root@localhost yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

安装docker-ce社区版

// 
[root@localhost yum.repos.d]# yum install -y docker-ce
[root@localhost yum.repos.d]# systemctl start docker
[root@localhost yum.repos.d]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@localhost yum.repos.d]# 

在这里插入图片描述

设置镜像加速

进入阿里云官方 搜索镜像加速器,可以显示出独立分配的加速器地址
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

// 
[root@localhost yum.repos.d]# mkdir -p /etc/docker
[root@localhost yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://m1aaxlq9.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://m1aaxlq9.mirror.aliyuncs.com"]
}
[root@localhost yum.repos.d]# systemctl daemon-reload
[root@localhost yum.repos.d]# systemctl restart docker

网络优化

//
 [root@localhost yum.repos.d]# vim /etc/sysctl.conf
 net.ipv4.ip_forward=1
 [root@localhost yum.repos.d]# systemctl restart network
[root@localhost yum.repos.d]# systemctl restart docker
[root@localhost yum.repos.d]# docker images #查看镜像方式1
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@localhost yum.repos.d]# docker image ls #查看镜像方式2

相关命令查看

查看docker版本

// 
[root@localhost yum.repos.d]# docker version
Client: Docker Engine - Community  #客户端
 Version:           20.10.8 #引擎
 API version:       1.41 #引擎版本
 Go version:        go1.16.6 #go语言版本
 Git commit:        3967b7d #git工具
 Built:             Fri Jul 30 19:55:49 2021 #创建时间
 OS/Arch:           linux/amd64 #操作系统
 Context:           default
 Experimental:      true

Server: Docker Engine - Community #服务端
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd: 
  Version:          1.4.9 #容器版本
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0 #初始化
  GitCommit:        de40ad0

用于显示docker系统级信息

// 
[root@localhost yum.repos.d]# docker info
Client:#客户端
 Context:    default #连接方式
 Debug Mode: false #调试模块
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0 #容量
  Running: 0 #运行数
  Paused: 0 #基础容器
  Stopped: 0 停止数
 Images: 0 #镜像数
 Server Version: 20.10.8 #版本
 Storage Driver: overlay2 #存储引擎
  Backing Filesystem: xfs #文件系统
  Supports d_type: true #支持的类型
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local #本地卷
  Network: bridge host ipvlan macvlan null overlay #支持的文件类型
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive #支援管理器
 Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
 Default Runtime: runc #默认的运行时环境:运行时容器
 Init Binary: docker-init #镜像基础对应的数据
 containerd version: e25210fe30a0a703442421b0f60afac609f950a3
 runc version: v1.0.1-0-g4144b63 #运行时容器环境
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 3.683GiB
 Name: localhost.localdomain
 ID: CYBX:CGEA:7JQB:I7UB:LPNJ:KXDT:PCXU:DH3Z:LRB4:LAB5:NNDI:CNDW
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8 #私有地址网段
 Registry Mirrors:
  https://m1aaxlq9.mirror.aliyuncs.com/ #镜像仓库地址
 Live Restore Enabled: false

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

Docker镜像相关操作

运行镜像

// 
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally ##没有这个镜像
latest: Pulling from library/hello-world #自动下载
b8dfde127a29: Pull complete  #镜像id
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1 #哈希加密
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

删除镜像

需要先删除容器再删除镜像

//
[root@localhost ~]# docker ps -a  #查看容器
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
b7d6f31dae52   hello-world   "/hello"   5 minutes ago   Exited (0) 5 minutes ago             happy_hodgkin
[root@localhost ~]# docker rm b7d6f31dae52 #删除容器
b7d6f31dae52
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   6 months ago   13.3kB

[root@localhost ~]# docker rmi d1165f221234 #删除镜像
[root@localhost ~]# docker rmi  `docker images -q`  #-q 列出镜像ID,多个删除
Untagged: hello-world:latest
Untagged: hello-world@sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726
Deleted: sha256:f22b99068db93900abe17f7f5e09ec775c2826ecfe9db961fea68293744144bd

搜索镜像用search

// 
[root@localhost ~]# docker search nginx
[root@localhost ~]# docker search centos:7

下载镜像用pull

//
[root@localhost ~]# docker pull nginx #默认是从docker hub
Using default tag: latest #latest最新版
latest: Pulling from library/nginx
a330b6cecb98: Pull complete 
5ef80e6f29b5: Pull complete 
f699b0db74e3: Pull complete 
0f701a34c55e: Pull complete 
3229dce7b89c: Pull complete 
ddb78cb2d047: Pull complete 
Digest: sha256:a05b0cdd4fc1be3b224ba9662ebdf98fe44c09c0c9215b45f84344c12867002e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

获取镜像信息

封装镜像的详细信息

// 
[root@localhost ~]# docker inspect 822b7ec2aaf2

在这里插入图片描述

添加镜像标签

// 
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    822b7ec2aaf2   32 hours ago   133MB
[root@localhost ~]# docker tag nginx:latest nginx:lamp
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        lamp      822b7ec2aaf2   32 hours ago   133MB
nginx        latest    822b7ec2aaf2   32 hours ago   133MB

镜像导出

// 
docker save -o  文件名镜像名
docker save -o centos_7 centos:7
scp centos_7 192.168.142.142:/opt

镜像导入

//
docker load < nginx

小结:
[root@docker docker]# docker ps -a
[root@docker ~]# docker ps -aq #只过滤出容器ID
16d885305462
[root@docker ~]# docker rm docker ps -aq #批量删除
CONTAINER ID:容器ID
IMAGE:镜像版本
CRATED:创建的时间
STATUS:运行的时间
PORTS:暴露的端口
NAMES:名称(可定义)

docker命令—容器操作

创建容器

//
[root@localhost ~]# docker create -it nginx:latest /bin/bash
e3047d0fa01866777b503d9b62e0360803a93c923432077ce3a611e0906672e2
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行

启动容器start

// 
[root@localhost ~]# docker start e3047d0fa018  #容器id
docker run centos:7 /usr/bin/bash -c ls /
// 
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS    PORTS     NAMES
e3047d0fa018   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Created             stupefied_golick
[root@localhost ~]# docker start e3047d0fa018  #容器id
e3047d0fa018
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS     NAMES
e3047d0fa018   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 18 seconds   80/tcp    stupefied_golick

停止容器

// 
docker stop  容器ID
// 
[root@localhost ~]# docker stop e3047d0fa018
e3047d0fa018

在这里插入图片描述

容器持续后台运行

// 
[root@docker ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
[root@docker ~]# watch -n 2 docker ps -a
[root@docker ~]# docker rm `docker ps -aq` #不会删除正在运行的

进入容器

// 
使用run
docker run -it nginx:latest /bin/bash         #一次性的,退出则关闭
//
exec(容器必须为开启状态)
docker exec -it  容器ID /bin/bash
//
PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach  会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

docker网络模式

HOST模式在这里插入图片描述

在这里插入图片描述

container 模式

在这里插入图片描述

None模式

在这里插入图片描述

Bridge模式(默认)

在这里插入图片描述
在这里插入图片描述

docker四种网络模式特点

//
host模式        -net=host                  容器和宿主机共享Network namespaceo
container模式   -net=container:NAME_or_ID  多个容器共享一个Network namespace.
none模式        -net=none容器有独立的Network,namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。
bridge模式      -net=bridge               (默认为该模式)
以上不需要动手配置,真正需要配置的是自定义网络

这篇关于docker简介和部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!