Docker是什么?
是一种轻量级的“虚拟机”
在Linux容器里运行应用的开源工具
Docker与虚拟机的区别
Docker与虚拟机的区别:
特性 | Docker 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗 50%左右 |
性能 | 接近原生 | 弱于 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源限制 | 完全隔离 |
Docker的使用场景
打包应用程序简化部署
可脱离底层硬件任意迁移
例:服务器从腾讯云迁移到阿里云
Docker的核心概念及安装方式
Docker核心概念
镜像
容器
仓库
CentOS安装Docker的两种方式
使用CURL获得Docker的安装脚本进行安装
使用YUM仓库来安装Docker
案例:安装Docker及基本管理
案例环境
主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
服务器 | Centos 7.3 x86-64 | Localhost/192.168.168.91 | Docker-18.03.0-ce |
需求描述
安装Docker
完成最基本Docker操作管理(创建、启动、参数等)
完成Docker创建资源控制及数据卷管理
1,安装docker
安装docker 有多种方法
curl -sSL https://get.daocloud.io/docker | sh
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
以上 命令都可以安装 docker
安装完成 启动服务
systemctl start docker
systemctl enable docker
登录浏览器 输入 https://hub.docker.com/ 登录 docker
https://hub.docker.com/
不需要登录 可以直接搜索
查找 到镜像 复制 可以直接下载 这里用 nginx 举例
主机里面 粘贴 命令直接下载 镜像
[root@localhost ~]# docker pull nginx:1.18.0-alpine
在下载一个centos镜像
[root@localhost ~]# docker pull centos:centos7.9.2009
查看 docker 里面下载的所有镜像
[root@localhost ~]# docker images
查看镜像具体信息 比如 docker inspect 镜像名:版本号
[root@localhost ~]# docker inspect nginx:1.18.0-alpine
当 镜像名字后面不跟版本号时 默认是 最新版本[latest] 比如 下载的时候
[root@localhost ~]# docker pull nginx
修改名字
修改名字 不会覆盖 而是 重新创建一个出来
[root@localhost ~]# docker tag nginx:1.18.0-alpine nginx:kgc01
[root@localhost ~]# docker images
删除 镜像
docker rmi 镜像名字:版本号 或者镜像ID
[root@localhost ~]# docker rmi nginx:kgc01
[root@localhost ~]# docker images
镜像 存入和载出
载出镜像 保存为文件
[root@localhost ~]# docker save -o centos_7.9.2009.tar centos:centos7.9.2009
[root@localhost ~]# docker save -o nginx_1.18.0-alpine.tar nginx:1.18.0-alpine
[root@localhost ~]# ls
删除 所有镜像
模拟现在是没有镜像的环境
[root@localhost ~]# for i in $(docker images -q); do docker rmi $i ;done
载入 镜像
[root@localhost ~]# docker load < nginx_1.18.0-alpine.tar
或者重定向输入 换成-i
[root@localhost ~]# docker load -i centos_7.9.2009.tar
[root@localhost ~]# docker images
创建容器
[root@localhost ~]# docker create nginx
查看 容器
这时是查看不到的 因为 ps 是查看正在运行 的容器 没有运行的 容器是查看不到的
所以需要加 -a 选项
查看所有 容器
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7df842ca2686 nginx "/docker-entrypoint.…" 15 seconds ago Created focused_grothendieck
启动容器
关闭容器时 吧start 换成stop 就可以了
[root@localhost ~]# docker start sleepy_dubinsky
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7df842ca2686 nginx "/docker-entrypoint.…" 56 seconds ago Up 3 seconds 80/tcp focused_grothendieck
删除容器
删除容器 一定要先 关闭 容器
[root@localhost ~]# docker stop sleepy_dubinsky
sleepy_dubinsky
[root@localhost ~]# docker rm sleepy_dubinsky
sleepy_dubinsky
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]#
启动容器 用得 最多的是 run
[root@localhost ~]# docker run nginx
这时 服务 在前端 执行 ctrl+c 终止掉后 容器 也会 自动停止
可以加一个-d 选项 让他在后台 执行
[root@localhost ~]# docker run -d nginx
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a9ca85703c5 nginx:1.18.0-alpine "/docker-entrypoint.…" 14 seconds ago Up 13 seconds 80/tcp inspiring_volhard
做 端口 映射
-p 指定 端口 -P 随机 端口
-p 让宿主机的82端口 映射到容器的80 端口
就是说 访问宿主机的82端口 就是访问 容器的80 端口
[root@localhost ~]# docker run -d -p 82:80 nginx
删掉
[root@localhost ~]# docker stop d18;docker rm d18
删除 所有容器
for i in $(docker ps -aq);do docker stop $i ;docker rm $i ;done
启动centos容器
这时 会发现 容器 启动后立刻自动关闭了
[root@localhost ~]# docker run -d centos:centos7.9.2009
可以在后面 加上一个时间 10秒后关闭
[root@localhost ~]# docker run -itd centos:centos7.9.2009 sleep 10
使用tail -f 让容器 一直启动
[root@localhost ~]# docker run -itd centos:centos7.9.2009 tail -f /etc/passwd
111d9d4ae1290bec36a6f8a856aa53f102fb0eb21ea33da8356d90af823a3008
[root@localhost ~]#
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
111d9d4ae129 centos:centos7.9.2009 "tail -f /etc/passwd" 2 seconds ago Up 1 second affectionate_jepsen
[root@localhost ~]#
创建镜像
进入 容器 进入 容器 可以排查 问题原因
[root@localhost ~]# docker exec -it affectionate_jepsen bash
[root@111d9d4ae129 /]#
容器里面 没有东西 需要什么 使用yum安转即可
创建一个Java镜像
[root@111d9d4ae129 /]# java
bash: java: command not found ##容器里面Java 没有安装
使用yum 安装
[root@111d9d4ae129 /]# yum -y list | grep jdk ##找一下Java的包
[root@111d9d4ae129 /]# yum -y install java-1.8.0-openjdk
[root@111d9d4ae129 /]# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
[root@111d9d4ae129 /]# exit
[root@localhost ~]# docker export affectionate_jepsen > centos_java.tar
[root@localhost ~]# ls
anaconda-ks.cfg centos_java.tar
把 tar包 加载为镜像
[root@localhost ~]# cat centos_java.tar | docker import - centos:java
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos java 79129bee4170 37 seconds ago 554MB
查看镜像 里面的Java 环境 有没有保存成功
[root@localhost ~]# docker run -d centos:java sleep 9999
[root@localhost ~]# docker exec -it nifty_pascal bash
[root@56489ffc4557 /]#
[root@56489ffc4557 /]# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (build 25.332-b09, mixed mode)
[root@56489ffc4557 /]#
实验
实验资源:
系统 | IP地址 | 上网模式 | 主要软件 |
centos7.9 | 192.168.10.128 | NET | Docker nginx |
实验要求:
- 安装Docker
- 使用centos7.16.1810运行一个容器
- 进入容器使用yum安装nginx
- 在网页根目录写一个index.html文件,内容:This is KGC
- 启动nginx服务
- 退出容器,将容器导出成一个文件,文件名:centos_nginx.tar
- 将文件加载成镜像,镜像名为centos:nginx
- 基于centos:nginx启动一个容器
- 要求 后要启动,宿主机的80端口映射到容器的80端口
实验步骤:
1)搭建基础环境
systemctl disable firewalld --now
setenforce 0
yum clean all && yum makecache
2)安装Docker
上面三条命令 哪一条都可以用
3)下载centos7.6.1810镜像
查看镜像的网站: Docker
docker -version
docker pull centos:centos7.6.1810
docker images
4)创建一个centos的容器并进入容器
docker run -itd -p 80:80 centos:centos7.6.1018 tail -f /etc/passwd
docker ps -a
docker exec -it 容器名 bash
5)安装nginx并修改配置文件;写一个index.html文件,内容:This is KGC
vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
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=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum -y install nginx
nginx
cd /usr/share/nginx/html/
mv index.html{,.bak}
vi index.html
This is KGC
查看网页:192.168.10.128:80
6)关闭容器并导出成一个文件
docker ps -a
docker stop agitated_perlman
docker export agitated_perlman > centos_nginx.tar
7)删除容器
docker rm agitated_perlman
8)使用导出的镜像文件启动一个容器
docker ps -a cat centos_nginx.tar | docker import - centos:nginx docker images
9)进入容器并启动nginx
docker exec -it inspiring_nobel bash
nginx
10)验证
查看网页:192.168.10.128:80