是轻量级的虚拟机,是一个引擎
是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
// [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 (默认为该模式) 以上不需要动手配置,真正需要配置的是自定义网络