Docker
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
CentOS 7(使用 yum 进行安装)
#1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
#2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3: 更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
#4: 开启Docker服务
service docker start
—镜像常用命令
docker images // 查看镜像
docker search 文件名 // 搜索镜像
docker pull 文件名 // 下载镜像
docker push 文件名 // 上传镜像
docker load < 文件名.tar // 导入镜像文件(格式为.tar) 例:docker load <nginx.tar
docker save image_name > xx.tar // 导出镜像包,镜像名可以docker images查看,REPOSITORY下面名字
docker run -it 镜像名称:镜像标签 启动命令 // 启动运行镜像 例:docker run -it night:night01 bash
//-i 表示交互 -t表示终端
例:docker run -it centos /usr/bin/python // 只要可以执行的命令都可以
[root@docker_1 ~]# docker run -it centos /bin/ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
docker tag // 修改镜像名称和标签
docker ps // 查看已开启的容器加 -a 查看所有容器
docker history 镜像名 // 查看镜像制作历叱
docker rmi 镜像名 // 删除本地镜像
docker save 镜像名 > 文件名.tar // 镜像另存为tar包
—容器常用命令
--后面加容器ID
docker run //运行容器
//-i交互式 -t终端 -d后台进程
//注意:启用一个有交互式的进程又要放后台进程用-itd , 单纯无交互放后台直接-d即可
docker ps // 查看容器列表 没加-a表示正在运行的容器 加-a查看所有容器 -q查看ID号
docker stop // 关闭容器
[root@docker_1 docker]# docker stop $(docker ps -q) //停用全部运行中的容器
docker start // 启动容器
docker restart // 重启容器
docker attach|exec // 进入容器 退出挂后台要用CTRL+P+Q
docker inspect // 查看容器底层信息 常用于查看服务IP和端口
docker top // 查看容器进程列表 相当于在容器里执行ps查看这个容器的进程
//容器的进程在运行它的物理机上可以查看到,隔离性没有KVM那么好
docker rm // 删除容器
[root@docker_1 docker]# docker rm $(docker ps -qa) // 删除所有容器
[root@docker_1 docker]# docker stop $(docker ps -q) & docker rm $(docker ps -aq)
docker exec -it 容器ID // 进入容器 建议用这个连接容器,exit退出后
[root@docker_1 docker]# docker exec -it 19c535ae17b3 bash // 要加命令
[root@docker_1 ~]# docker run -d -p 80:80 nginx
虚拟机:
通过虚拟化技术我们可以在服务上运行多个不同环境的虚拟机,大大提高我们对服务器的利用率!
虚拟机的硬件的弹性扩展也方便了我们后期虚拟机配置的提升
统一的管理平台也会大大降低我们的维护成本
容器:
容器本身的意思是指可以存放东西的器皿,我们这里可以把容器想想成是一个盒子、箱子!里面存放的就是我们要运行的应用:如一个nginx、tomcat
容器技术相对于虚拟机具有哪些特点?
1.体积小
2.启动速度快
3.性能接近原生
4.单节点支持的容器的数量多
6.环境一致性
**
docker的安装
**
Centos7.6
1.配置docker的yum源,可以使用阿里云的
2.安装docker-ce
yum -y install docker-ce
3.关闭防火墙
systemctl stop firewalld
setenforce
4.启动Docker
systemctl start docker
systemctl enable docker
Docker三个基本概念
1.镜像仓库(hub.docker.com 镜像仓库)
2.镜像
3.容器
Docker常用命令:
对镜像的操作:
1.获取镜像
增:
docker pull 镜像名:TAG
删:
删除镜像,我们不能直接删除有容器依赖的镜像
docker rmi 镜像名/ID
docker rmi -f 镜像名/ID
改:
docker tag
查:
查看本地镜像
docker images
对容器的操作:
增:
1.创建并运行容器
docker run --name 容器名字 -d -p 宿主机端口:容器端口 基础镜像
例子: docker run --name web1 -d -p 80:80 nginx:latest
docker run --name learn1 -it busybox /bin/sh 以可交互的方式运行一个容器
删:
删除容器,我们不能直接删除一个正在运行的容器,需要先停止再删除,或者-f,强制删除
docker rm web1
docker rm -f web1
改:
容器重命名
docker rename // 修改容器名字
容器启动和停止
docker start/stop/restart // 容器名
docker pause 容器名 // 暂停容器
docker unpause 容器名 // 取消暂停容器
docker update // 更新容器的配置
docker cp // 容器和宿主机之间复制文件,默认覆盖已有的文件
docker exec // 在运行的容器中执行一条命令
docker exec -it web1 /bin/bash // 以交互的方式进入web1容器操作
查:
查看正在运行的容器
docker ps
查看所有的容器
docker ps -a
docker stats 容器名 // 查看容器运行状态(CPU\内存\网络IO\磁盘IO使用情况)
docker top 容器名 // 查看容器正在运行的进程
docker inspect 容器/镜像 // 查看容器或者镜像的底层信息,元数据,比如查看ip、主机名、数据卷、CMD等信息
docker logs [-f] // 查看容器内部进程的日志
构建镜像:
基于一个容器构建一个新镜像
1.运行一个基于(Centos/Ubuntu/alpine)启动一个容器,在容器内部执行更改操作,比如安装一个工具或者服务!
2.使用docker commit 将容器提交更改并生成一个新的镜像,比如有个叫ztt的容器,基于它创建一个镜像nginx:1.0
例子:docker commit ztt nginx:1.0
补全命令:
yum -y install bash-completion-extras.noarch pletion
数据卷
数据卷的增删改查
docker volume create 卷名 // 创建一个数据卷
ls // 查看已有的数据卷
rm // 删除一个或多个数据卷
prune // 删除所有未被使用的数据卷
inspect // 显示一个或者多个卷的详细信息
默认创建的数据卷放在:/var/lib/docker/volume
数据卷的服务对象是容器,当容器创建的时候可以指定挂在那个卷
docker run --name wed1 -d -p 80:80 -v html:/usr/share/nginx/html 10.30.5.120/docker/nginx
匿名卷
自动创建
docker run --name wed1 -d -p 80:80 -v /usr/share/nginx/html 10.30.5.120/docker/nginx
我们也可以在构建镜像的时候,将一些重要的目录里设置为挂载点,如果容器内某个目录被定义为挂载点,name在创建的时候,这个挂载点,如果不指定挂载数据卷的话,那么将会自动挂载一个匿名卷到挂载点,保证这个挂载点下的数据肯定是写入到卷当中的!
Docker部署wordpress
需要运行两个容器,一个mysql容器一个wordpress容器,他们都有自带的一些变量,方便我们去部署他们
#####################################################################################
mysql镜像内置变量
WORDPRESS_DB_HOST // MySQL数据库主机IP地址
WORDPRESS_DB_PORT // MySQL服务的端口
WORDPRESS_DB_NAME // 数据库名字
WORDPRESS_DB_PASSWORD // 数据库密码
WORDPRESS_DB_DATABASE // 创建数据库名
创建MySQL容器
docker run --name mysql -d -p 3306:3306 -v data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123 \
> -e MYSQL_DATABASE=wordpress \
> -e MYSQL_USER=tom \
> -e MYSQL_PASSWORD=123456 --restart always 10.30.5.120/docker/mysql:5.6
#####################################################################################
wordpress镜像内置的变量
WORDPRESS_DB_HOST // MySQL数据库主机ip地址
WORDPRESS_DB_PORT // Mysql服务的端口
WORDPRESS_DB_NAME // 数据库的名字
WORDPRESS_DB_USER // 登录MySQL的用户
WORDPRESS_DB_PASSWORD // 登录用户密码
创建wordpress容器
docker run --name wordpress -d -p 80:80 \
-e WORDPRESS_DB_HOST=192.168.189.171 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=tom \
-e WORDPRESS_DB_PASSWORD=123456 --restart always --link mysql 10.30.5.120/docker/wordpress
DB_PASSWORD // 登录用户密码
创建wordpress容器
docker run --name wordpress -d -p 80:80 \
-e WORDPRESS_DB_HOST=192.168.189.171 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=tom \
-e WORDPRESS_DB_PASSWORD=123456 --restart always --link mysql 10.30.5.120/docker/wordpress
``