0. 扫盲
1. 各种软件用什么语言写的
- zabbix(监控软件):php
- ansible(批量管理主机,执行命令,无angent):python
- openstack(云计算,管理虚拟机):python
- jekins(ci/di):自动化部署,java
- salstack(批量管理主机,执行命令,有angent):python
- 普罗米修斯(Prometheus,监控):go写的
- docker:go
- k8s:go
2. 什么是虚拟化?
- 虚拟化:打破实体结构间的不可切割的障碍
- vmware,kvm,openstack,docker,k8s的区别
- 云服务器:vmware,kvm虚拟化出来的
- 阿里云,腾讯云,opensatck,阿里飞天,用来管理虚拟化出来的操作系统
- docker:进程级别的隔离,装在虚拟机,云服务器上,一个云服务上开业跑出成几百个docker容器,成百上千的服务器上,就会有个上万个容器
- k8s:不同机器的上万个容器如何管理
3. 什么是Docker?
- Go语言实现,开源出来,很多人用
- docker-ce(免费),docker-ee(收费)
- 通过go语言对lxc技术的一个封装
- 上手快,简单
- Docker是一个客户端-服务器(C/S)架构程序(mysql,redis都是cs架构),整套RESTful API
- docker非常重要的概念:镜像(image)与容器(container)有了镜像---》镜像运行起来是容器(真正的执行单位)
- 镜像是从哪里来的?
- 镜像就是一堆文件
- 从远程仓库获取(拉取)
3 容器与虚拟机比较
- docker不需要虚拟硬件和操作系统,轻量级,占用体积小,启动快
一. docker安装
1. ubuntu(18.04)下安装docker
a. 更新ubuntu的apt源索引
sudo apt-get update
b. 安装包允许apt通过HTTPS使用仓库
sudo dpkg --configure -a
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
c. 添加Docker官方GPG key【这个是国外服务器地址,所以网路不好的时候,会失败!在网路好的情况下,多执行几次就没问题了】
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
d. 设置Docker稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
e. 添加仓库后,更新apt源索引
sudo apt-get update
f. 前面的准备工作完成以后,接下来安装最新版Docker CE(社区版)
sudo apt-get install docker-ce
g. 检查Docker CE是否安装正确
sudo docker run hello-world
h. 出现了helo from Docker
则表示上面的安装成功!
i. 卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
2. centos(版本必须7以上,这里使用7.5)安装docker
a. 更新yum
yum update
b. 安装需要的软件包, yum-util
yum install -y yum-utils device-mapper-persistent-data lvm2
c. 执行(向你的yum源,增加一条记录)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
d. 安装
yum install docker-ce
e. 验证安装(查看版本)
docker -v
f. 卸载
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
二. docker启动/停止/重启
启动docker服务
systemctl start docker
停止docker服务,
systemctl stop docker
重启docker服务
systemctl restart docker
开机启动
systemctl enable docker
查看概要信息
docker info(你可能写了一个管理docker的运维平台)
三. 换源以及官网(适用于ubuntu/centos7.5的docker)
1. 配置加速(之前去https://hub.docker.com/)。
阿里云,清华,做了一个备份,配置好以后,再拉镜像会去国内地址拉取
第一步:
vim /etc/docker/daemon.json
第二步:
# 换一个
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
# 换多个
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn,
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.cn-hangzhou.aliyuncs.com", # 阿里云源
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
第三步 重启docker
systemctl daemon-reload
systemctl restart docker
四. 镜像操作
1. 查看镜像
a. 格式
docker image ls
b. 简写
docker images
2. 拉取镜像
a. 格式
docker image pull redis
b. 简写
docker pull redis
c. 拉取指定的版本(默认拉的最新版) 格式:docker pull 镜像名称:版本
docker pull python:3.6
3. 删除镜像(如果该镜像创建了容器,必须先删除容器)
a. 格式
docker image rm 镜像名称/镜像ID
b. 简写
docker rmi 镜像名称/镜像ID
4. 镜像打包/解压(会打包成一个tar压缩文件)
打包
docker save -o <文件名.tar.gz> <镜像名> 或者 <文件名.tar> <镜像名>
案例
docker save -o redis.tar redis
docker save -o mydjango.tar mydjango
解压
docker load -i <文件名.tar.gz> 或者 <文件名.tar>
案例
docker load -i mydjango.tar
五. 容器操作[container]
1. 创建容器
必须先有镜像,才能运行创建容器,需要指定使用的镜像名,并且设置创建容器以后,执行对应的第一条命令。
创建并运行容器
docker run <参数选项> <镜像名称>
案例(几条常用的):
# 基于nginx镜像创建一个容器并运行---访问80端口即可看到nginx的页面
docker run -di --name=nginx -p 80:80 nginx
docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker run -di --name=redis -p 6377:6379 redis:latest
参数介绍:
-创建并启动(run)
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
--name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
-v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
命令介绍:
/bin/bash 一直等待,容器不停止
exec真正的作用是在容器内执行命令
2. 进入容器的几种方式(并不是真进入)
第一种:docker exec -it 容器id /bin/bash
第二种:ssh连接(容器内部装ssh服务端)
案例
docker exec -it 14166 /bin/bash
3. 退出容器
exit
4. 删除容器
docker container rm <容器名称/容器ID>
5. 高级操作
10 文件拷贝(都是站在容器外cp,因为容器内没有docker)
-从宿主机拷贝到容器内部
格式:
docker cp 文件 容器id:容器内路径
案例:
docker cp test.txt 1416:/home
-从容器内部拷贝到宿主机
格式:
docker cp 容器id:容器内路径/文件 容器外路径
案例:
docker cp 14166:/home/test.txt /home/
11 目录挂载(外部与内部双向绑定,外改内改,内改外改)
# 一旦挂载,以后宿主机目录内修改,同样影响容器内部
格式:
docker run -di --name=xxx -v 宿主机路径:容器内路径 镜像
案例:
docker run -di --name=t1 -v /home/ymq:/home/ centos
12 端口映射
格式:
docker run -di -p 宿主机端口:容器端口 镜像
案例:
docker run -di -p 6377:6379 redis:latest
6. 其他操作
3 查看机器上正在运行的容器
docker ps
4 查看宿主机上所有的容器(包括停止的)
docker ps -a
5 停止容器
docker stop 容器名字/id号
6 启动容器
docker start 容器id/名字
13 查看容器详细信息
docker inspect f81
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
14. 杀死容器
docker container kill <容器名称/容器ID>
7.容器保存为镜像
docker commit 容器名字 镜像名字
docker commit 19b mydjango