文章目录
1.Docker简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
1.1 Docker的应用场景
-
Web 应用的自动化打包和发布。
-
自动化测试和持续集成、发布。
-
在服务型环境中部署和调整数据库或其他的后台应用。
-
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
1.2 Docker 的优点
- Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
- 快速,一致地交付您的应用程序
-
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案: -
开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
- 响应式部署和扩展
-
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
-
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
- 在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
- 对 开发人员 Build once run anywhere
- 对 运维人员 Configure once ,run anything
1.3 传统虚拟化与容器技术对比
- docker不依赖于底层
1.4 容器是怎么工作的
2. 安装
- 配置YUM源
vim /etc/yum.repos.d/docker-ce.repo
[docker]
name=docker ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
yum install -y docker-ce
安装
- 发现error
yum install -y container-selinux-2.77-1.el7.noarch.rpm
安装依赖性
systemctl start docker
开启docker
systemctl enable docker
开机自启docker
3. Docker的基础用法
3.1 Docker容器使用
docker info
查看信息
- 出现warning,解决办法
cd /etc/sysctl.d/
vim docker.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
sysctl --system
使设置生效
docker pull XXX
获取镜像XXX
docker run -it ubuntu /bin/bash
启动容器
- i 交互式操作
- t 终端
- ubuntu ubuntu镜像
- /bin/bash 放在镜像后的是命令,希望有一个交互式的shell,所以用/bin/bash
- 退出直接输入exit
ctrl+pq 不停止容器,后台运行
ctrl+d 直接结束容器,释放内存
- 查看所有的容器
docker ps -a
docker start 74e2759a0d05
启动一个已经停止的容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
使容器在后台运行,通过-d 指定容器的运行模式,加了-d默认不会直接进入容器,想要进入容器需要使用docker exec
docker stop <ID>
停止容器
docker restart <ID>
重启容器- 进入容器,在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
docker exec
:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
- 导入和导出容器
docker export 1ee0557e151b > ubuntu.tar
导出了 1ee0557e151b 快照到到本地文件ubuntu.tar
cat ubuntu.tar | docker import - test/ubuntu
导入容器快照
- 删除容器
docker rm -f 1ee0557e151b
- docker load -i ubuntu.tar 导入镜像
- docker run -it --name vm1 ubuntu 创建容器(以ubuntu镜像为模板)
- docker ps 查看容器状态
- docker ps -a 查看容器状态(包括不活跃的容器)
- docker attach vm1 连接容器
- docker top vm1 查看容器进程
- docker logs vm1 查看容器指令输出 -f 参数可以实时查看
- docker inspect vm1 查看容器详情
- docker stats vm1 查看容器资源使用率
- docker diff vm1 查看容器修改
- docker stop vm1 停止容器
- docker start vm1 启动容器
- docker kill vm1 强制干掉容器
- docker restart vm1 重启容器
- docker pause/unpause vm1 暂停/恢复容器
- - docker ps -a 查看所有的容器
- docker ps 查看所有的正在运行的容器
- docker images 查看已经导入的镜像
- docker pull nginx 从公有库下载nginx
- docker run -d --name game -p 8080:80 game2048 运行指定的镜像
-d 后台运行
-p 8800:80 是指定对外暴露的端口 容器内部用80 对应外部的8800 代理一样
--name指定容器的名字 最后的nginx 代码要运行的镜像名字
有tag的加上tag 如 game2048:xxx
默认为latest 然后访问宿主主机地址+8800端口
- docker run -it --name demo1 ubuntu
-i:交互
-t:终端
- docker run -it --name demo1 nginx bash 加一个bash可以调出shell
- docker container exec -it demo1 bash 后台开启时调动shell的方法
- docker export demo1 > demo1.tar 导出镜像
- docker import demo1.tar image 导入镜像
3.2 运行一个小游戏
- 在网络上下载一个2048的镜像
docker load -i game2048.tar
导入镜像
docker run -d --name game1 -p 80:80 game2048
后台运行容器-p 80:80使做一个端口映射
docker ps
查看当前运行容器
- 浏览器访问容器
3.3 Docker镜像使用
docker images
列出镜像列表
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID : 镜像ID
CREATED:镜像创建的时间
SIZE : 镜像大小
docker search httpd
查找镜像
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
docker pull httpd
拖取镜像
docker rmi httpd
删除镜像