Docker
环境配置
环境配置
操作系统的设置,各种库和组件的安装。
带环境安装的一种解决方案 虚拟机 (1)资源占用多 (2)冗余步骤多 (3)启动慢
Linux 容器(Linux Containers,缩写为 LXC) 进程级别的
多个容器可以共享资源,虚拟机都是独享资源
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。
(1)启动快 (2)资源占用少 (3)体积小
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口
用途:
提供一次性的环境
提供弹性的云服务
组建微服务架构
社区版(Community Edition,缩写为 CE)
企业版(Enterprise Edition,缩写为 EE)
docker version
docker info
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
# 将 image 文件从仓库抓取到本地
docker image pull library/hello-world
# 运行这个 image 文件
docker container run hello-world
docker container run -it ubuntu bash
docker container kill [containID]
# 列出本机正在运行的容器
docker container ls
# 列出本机所有容器,包括终止运行的容器
docker container ls --all
# 删除容器文件
$ docker container rm [containerID]
# 创建 image 文件
$ docker image build -t koa-demo .
# 或者
$ docker image build -t koa-demo:0.0.1 .
# 生成容器
$ docker container run -p 8000:3000 -it koa-demo /bin/bash
# 或者
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
docker container run --rm -p 8000:3000 -it koa-demo /bin/bash
docker container start [containerID]
docker container stop [containerID]
docker container logs
docker container exec
docker container cp [containID]:[/path/to/file] .
$ docker container inspect wordpress
http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
服务器----客户端架构
Docker 把应用程序及其依赖,打包在 image 文件里面 容器的模板 image 是二进制文件
Docker Hub 最重要、最常用的image 仓库 组
image 文件生成的容器实例,本身也是一个文件,称为容器文件
Dockerfile 文件
.dockerignore
软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器
Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来
微服务(microservices)的思想:软件把任务外包出去,让各种外部服务完成这些任务,
软件本身只是底层服务的调度中心和组装层
业务容器 + 数据库容器
$ docker container run \
--rm \
--name wordpress \
--volume "$PWD/":/var/www/html \
php:5.6-apache
$ docker container run \
-d \
--rm \
--name wordpressdb \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7
$ docker container run \
--rm \
--name wordpress \
--volume "$PWD/":/var/www/html \
--link wordpressdb:mysql \
phpwithmysql
$ docker container run \
-d \
-p 127.0.0.2:8080:80 \
--rm \
--name wordpress \
--env WORDPRESS_DB_PASSWORD=123456 \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
wordpress
Compose
试图解决开发者的世纪难题在我的机器上可以跑
虚拟机创建占用了一套完整的系统资源(guest os),存在着大材小用的问题
Docker本质仅隔离应用程序,共享当前系统核心
虚拟机热迁移 这个功能,Docker就做的不是很好
Docker可以快速的搭建配置应用环境,简化操作,确保运行环境一致性“一次编译 到处运行”,应用级隔离,弹性伸缩,快速拓展
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
docker pull nginx
docker image ls
开源的应用容器引擎
Go 语言
让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化
沙箱机制
容器性能开销极低
CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
运维工程师及后端开发人员
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布
PaaS 环境。
用于开发,交付和运行应用程序的开放平台
应用程序与基础架构分开,从而可以快速交付软件
管理应用程序相同的方式来管理基础架构
快速交付,测试和部署代码
持续集成和持续交付(CI / CD)工作流程
可移植性和轻量级
三个基本概念:镜像(Image)容器(Container)仓库(Repository)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体
容器可以被创建、启动、停止、删除、暂停等
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像
yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
$ sudo systemctl start docker
$ sudo docker run hello-world
Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run ubuntu:15.10 /bin/echo "Hello world"
Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像
docker run -i -t ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互
cat /proc/version
运行 exit 命令或者使用 CTRL+D 来退出容器。
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
容器 ID
docker ps
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称
docker logs 命令,查看容器内的标准输出
docker stop 命令来停止容器
docker 命令来查看到 Docker 客户端的所有命令选项
ocker command --help
docker pull ubuntu 获取镜像
docker run -it ubuntu /bin/bash
-i: 交互式操作。
-t: 终端。
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令
docker start 启动一个已停止的容器
查看所有的容器 docker ps -a
docker run -itd --name ubuntu-test ubuntu /bin/bash
docker stop <容器 ID>
docker restart <容器 ID>
$ docker attach 1e560fca3906
docker exec -it 243c32535da7 /bin/bash
docker export 1e560fca3906 > ubuntu.tar
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
docker import http://example.com/exampleimage.tgz example/imagerepo
docker rm -f 1e560fca3906
docker run -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
docker run -d -p 5000:5000 training/webapp python app.py
docker ps 来查看我们正在运行的容器
docker run -d -p 5000:5000 training/webapp python app.py
docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号
docker logs -f bf08b7f2cd89
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
使用 docker top 来查看容器内部运行的进程
docker inspect 来查看 Docker 的底层信息
docker images 来列出本地主机上的镜像
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
使用 REPOSITORY:TAG 来定义不同的镜像
docker pull ubuntu:13.10
docker search httpd
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m: 提交的描述信息
-a: 指定镜像作者
e218edb10161:容器 ID
runoob/ubuntu:v2: 指定要创建的目标镜像名
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
docker build -t runoob/centos:6.7 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
docker tag 860c279d2fec runoob/centos:dev
设置镜像标签
Docker 容器连接
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
docker run -d -P training/webapp python app.py
docker ps
docker run -d -p 5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
容器命名
docker run -d -P --name runoob training/webapp python app.py
docker network create -d bridge test-net
的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
docker run -it --rm ubuntu cat etc/resolv.conf
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
docker login
docker logout
$ docker search ubuntu
docker pull ubuntu
docker push
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明