是轻量级的虚拟机,是一个引擎
是linux容器里运行应用的开源工具。
是基于容器技术的轻量级虚拟化解决方案,docker是由容器引擎,把linux的cgroup、namespace等容器底层技术进行完美的封装、并抽象为用户提供从创建和管理容器的便捷界面(Cli、api等)C/S
资源利用率docker更高,虚拟化耗资源
不需要镜像,只需要封装一个建议的操作系统
因为随着技术的发展,虚拟化技术开销过大,运行一个脚本还等安装一个系统才行,而docker不需要虚拟硬件资源,直接使用容器引擎,速度快。
隔离应用:其实就是资源的隔离
要实现以下6中名称空间隔离才能算是真正的完全隔离应用。
mount 文件系统挂载点-》一个文件系统内,不能重复挂载一个指定的目录
user 操作进程的用户和用户组得
pid 进程标号要
uts 主机名和主机域
ipc 信号量、消息队列、共享内存(不同的应用调用不同的信号量、消息队列、共享内存)
net 网络设备、网络协议栈、端口等
① 镜像:模板;组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
②容器(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
//
[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
//
[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
//
[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
//
[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
//
[root@localhost ~]# docker search nginx
[root@localhost ~]# docker search centos:7
//
[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:名称(可定义)
//
[root@localhost ~]# docker create -it nginx:latest /bin/bash
e3047d0fa01866777b503d9b62e0360803a93c923432077ce3a611e0906672e2
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行
//
[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
docker stop $(docker ps -qa) #批量停止容器
docker rm $(docker ps -qa) #批量删除容器
//
[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退出容器,不影响容器运行。
//
host模式 -net=host 容器和宿主机共享Network namespaceo
container模式 -net=container:NAME_or_ID 多个容器共享一个Network namespace.
none模式 -net=none容器有独立的Network,namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。
bridge模式 -net=bridge (默认为该模式)
以上不需要动手配置,真正需要配置的是自定义网络