Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
1、快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
2、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务
3、在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情
本次演示使用的是CentOS7,提前准备好虚拟机,如果有不懂的可参考之前文章centos7安装然后开始安装docker
可以参考官网上面的介绍步骤开始往下走
第一步,卸载旧版本的命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
第二步,安装docker 依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
第三步,设置仓库
使用官方源地址(比较慢)
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
建议使用国内的一些源地址
阿里云
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第四步,安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
第五步,启动docker
sudo systemctl start docker
查看docker 版本
docker version
第六步,测试docker是否安装成功 run命令是运行一个镜像,如果本地没有发现hello-world 他就会去远程pull 一个hello-world ;pull需要点时间,所以得等待一下
sudo docker run hello-world
这样就是安装成功了
再确认一下是否安装成功,可以输入命令
docker images
获取一个docker image命令如下:
后面可以加上版本号,如果不加默认就是最新版的
docker pull tomcat
docker pull redis:4014-alpine3.10
删除image[该image不能有正在使用的container]
docker rmi -rf imageid[imagername]
Docker 镜像加速
docker image 下载速度太慢,此时可以配置镜像加速器
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
阿里云镜像获取地址登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了
然后到:vi /etc/docker/daemon.json文件里面
输入:
{
"registry-mirrors":["https://hub-mirror.c.163.com/"]
}
保存退出,之后重新启动服务:
systemctl daemon-reload
systemctl restart docker
container基本操作
已经有了image,那么可以基于image创建container,如果没有docker run这个命令就会去远端进行拉取
container的创建
以tomcat为例
docker run -- name tomcat
可以看到tomcat 已经启动成功了
再重新打开一个连接
查看当前正在运行的container
docker ps
查看所有的container:
docker ps -a
删除container
docker rm -f containerid[containername]
再查看已经没有正在运行的container
希望该container能够在后台运行
docker run -d -- name tomcat
批量删除全部的container
docker ps -a 所有的container
docker rm -f $(docker ps -a) 先查出所有的然后再进行删除
进入到指定的container中
docker exec -it containerid/name bash
再次启动tomcat
可以发现进入到了一个linux的目录
conclusion:发现tomcat的container是运行在linux机器上的
tomcat的container 有1个ip :172.12.0.2
退出container 所在的linux机器
exit
将container里面的port8080映射到centos的8888端口
再启动一个tomcat 的镜像取名为tomcat2
docker run -d --name tomcat2 -p 8888:8080 tomcat
输入命令
curl localhost:8888
本地物理机是可以访问的
得出结论:
container 实际上底层就是一个linux系统,只不过linux系统占用资源特别小
image —>linux
container -->基于image运行起来的一个个可读可写的环境
image可以从仓库拉取,也可以手动创建就是基于dockerfile 文件创建的
所有的镜像都是基于dockerfile文件创建,我们可以看下开源出来的dockerfile文件地址
DockerFile简介
FROM 制作该image的基础镜像 layer
RUN 运行一条指令
ENV 定义常量
COPY 拷贝内容
ENTRYPOINT 设置容器启动时运行的指令
CMD 容器启动时运行的指令 参数的设置
EXPOSE 暴露在外面的端口是什么
本地创建简单dockerfile镜像
找一个目录然后 vi 编辑一个dockerfile文件
FROM centos
ENV name test
CMD echo "hello word $name"
很简单就是输出一句话
保存好文件后输入命令
docker build -t test .
build 完成以后就可以查看本地镜像是否存在了
然后运行
image仓库搭建
我们再实际开发过程中,可能得共享镜像给其他人用,这个时候就需要搭建一个仓库了
注册账号 到官网
输入命令登录
docker login
输入用户名和密码以后
docker images 查看本地镜像
然后tag 一下
docker tag test gwh2020/test
push 上去类似于git命令
docker push 登录名/本地镜像
如果要拉取仓库中的镜像就输入
docker pull 登录名/远程镜像
docker 网络
创建docker 网络
docker network create --subnet=172.18.0.0/24 tomcat-net
查看docker 网络
docker network ls
查看创建好的网络
docker network inspect tomcat-net
docker 数据持久化
例如mysql 数据库创建,连接,销毁之后数据就没了,为了防止这种情况的发生,使用了
volume 目录来进行数据保存
1.在centos中要新建一个目录volume
docker volume create --name v1
2.查看一下当前v1的信息
docker volume inspect v1
3.以mysql 数据库为例,使用该v1
docker run -d -p 3301:3306 mysql
如果要使用特定的网络
[
docker network create --subnet=172.19.0.0/24 mysql-net
]
运行mysql
docker run -d -p 3301:3306 --net=mysql-net --ip 172.19.0.2 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=gwh2020 --privileged --name=first-mysql mysql
命令解读:启动一个容器 ,映射端口为 3301 使用的网关为 mysql-net 分配的ip为 172.19.0.2 使用的目录为 v1 映射文件地址为 /var/lib/mysql root用户密码为 gwh2020 名称为first-mysql 使用的镜像为 mysql
4.进入到mysql 容器
docker exec -it first-mysql bash
mysql -uroot -pgwh2020
6.销毁容器
docker rm -f first-mysql
7.如果要再使用容器,只要借用volume 目录即可,因为上一个mysql 的信息是保存再这个目录下的
-v v1:/var/lib/mysql 数据可以恢复
docker compose
在daocker 中安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
//授权
chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose --version
docker-compose 就类似springboot 中的yml文件,统一管理和配置的
docker-compose 中标签的含义
- services:service表示的就是一个container
- networks:就是网络
- volumes:数据的映射
使用docker-compose常见的命令
- docker-compose up -d 启动当前yml中的container,如果镜像没有的话,会拉取镜像
- docker-compose ps 查看当前compose中的service
- docker-compose stop/down 停止/删除
- docker-compose images 查看images
- docker-compose exec mysql baseh 进入container
转载:https://blog.csdn.net/G_whang/article/details/117200000