文章目录
docker学习总结
最近在学习docker,内容比较多也比较简单,所以做一个简单的总结,做为笔记供自己学习
参考链接:
广州千峰-李卫民-博客(推荐加书签)
1. docker是什么
我解释起来比较困难,推荐自行百度或阅读参考文章
引用百度百科的解释:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
我个人的理解:
docker是一个容器化引擎,能够在运行在win,mac,linux 三大平台下的容器引擎,我们把操作系统比作一个房间,docker就像一个打气筒,能简单快速的制造出一个轻量化的气球(容器)出来,我们能再这个轻量化的容器里面做我们需要的操作,容器能与外部隔离但是又可以和外部共享网络,文件等资源;理解不是很到位,但是这个比较容易理解的大概意思
参考文章:
2. docker安装
由于不同版本的linux安装docker有一点点不同,但是也都是大同小异的,所以推荐请根据自己的系统版本百度安装教程,或者阅读参考文章
我个人使用的是centos7,在这里只列举centos7下面的docker安装
docker分 yum安装
和 脚本安装
的方式,由于我的linux命令使用比较渣,所以我就是用了最简单的<使用 yum 安装>
Docker 划分为 CE 和 EE。CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使用
警告:
切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker
安装要求:
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10
查看内核版本命令:
uname -a
安装
1.卸载旧版本
旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:
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
2.安装依赖包:
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3.修改软件源:
鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看
sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
4.安装 Docker CE:
更新 yum 软件源缓存,并安装 docker-ce
sudo yum makecache fast
sudo yum install docker-ce
参考安装文章:
我个人觉得这个博客里面的教程是比较全面的,几乎所有系统版本的安装教程都有,直接参考借鉴
参考文章:
3. docker简单使用
docker 用起来比较简单,主要是 拉取镜像(pull)和运行容器(run),所以这里我不做深入讲解,还是简单的介绍使用
常用命令的最简单使用
拉取镜像
格式:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
说明:
从 Docker 镜像仓库获取镜像的命令,如果只加镜像名称,默认下载最新版本镜像
示例:
docker pull ubuntu:16.04
列出所有镜像:
命令:
docker image ls
说明:
列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间。
删除镜像:
命令:
docker image rm [选项] <镜像1> [<镜像2> ...]```或者 ```docker rmi <镜像>
说明:
其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。
启动容器:
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
命令:
docker run -p -d <外部端口>:<容器内端口> --name <容器名称> <镜像>
说明:
-p:表示映射端口(-P 就不用跟参数,会随机映射端口)
-d:表示以守护态启动容器(即在后台运行)
--name:表示为容器提供名称(可以不填,会随机命名)
镜像: 镜像的id,名称,等等,(值得一提的是,如果没有pull镜像,docker会先自动去pull镜像,在run,也就说我们不需要pull,只需要run即可)
示例:
docker run -p 8080:8080 --name tomcat tomcat
查看运行中的容器:
命令:
docker ps
查看所有容器:
命令:
docker ps -a
终止容器:
命令:
docker stop <容器>
说明:
这里的容器可以是容器id,或者容器名称名称
删除容器:
命令:
docker rm <容器>
说明:
这里的容器可以是容器id,或者容器名称名称
注意:
删除容器之前一定要先停止容器,否则无法删除,或者添加 -f 参数强制删除
进入容器:
在使用 -d 参数时,容器启动后会进入后台。
某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令,所以这里我只介绍exec命令
命令:
docker exec -i -t <容器> /bin/bash
说明:
进入容器里面一样可以使用部分linux命令
退出容器:
ctrl+d
或 exit
docker运行nginx案例
1. 下载镜像
docker pull nginx
2. 运行nginx容器(运行成功后可以在浏览器输入linux服务器地址访问)
docker run -p 80:80 -d --name nginx nginx
3. 查看运行中容器
docker ps
4. 停止nginx容器(这里我是根据一开始–name设置的镜像名称,不然就要使用ps里面的镜像ID)
docker stop nginx
5. 删除nginx容器
docker rm nginx
6. 删除nginx镜像
docker rmi nginx
7.参考文章:
4. docker-compose简单使用
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
Docker Compose 介绍
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。
其代码目前在 https://github.com/docker/compose 上开源。
Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。
通过第一部分中的介绍,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。
参考文章:
Docker Compose 安装与卸载
Compose 支持 Linux、macOS、Windows 10 三大平台。
Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。
二进制包安装
在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
手动安装
我个人是在GitHub 上下的tar.gz包,然后解压到/usr/local/bin/docker-compose目录
卸载
如果是二进制包方式安装的,删除二进制文件即可。
sudo rm /usr/local/bin/docker-compose
如果是通过 pip 安装的,则执行如下命令即可删除。
sudo pip uninstall docker-compose
参考文章:
Docker Compose 命令的简单使用
1.在/usr/local/docker/test 目录下新建docker-compost.yml模板文件(一定要是这个名字)
2.编辑模板文件内容
模板文件内容请参考文章Docker Compose 模板文件,下面的nginx 案例会做部分介绍
3.执行常用命令(需要在有docker-compose.yml文件目录下执行):
运行docker compose项目:
docker-compose up
守护态运行docker compose项目:
docker-compose up -d
停止docker compose项目:
docker-compose down
重启docker compose 项目:
docker-compose restart
Docker Compose 运行 nginx 案例
1. 新建目录
mkdir /usr/local/docker/nginx
2. 在nginx目录新建docker-compose.yml 模板文件
touch docker-compose.yml
3.编辑模板文件内容
vi docker-compose.yml
内容:
version: "3"
services:
nginx:
restart: always
container_name: nginx
image: nginx
ports:
- 80:80
- 443:443
说明:
version: compose版本,最新的是3
services: 服务集合
nginx: 服务名称
restart: 是否自动启动
container_name: 容器名称
image: 镜像名称(这个是必填的)
ports: 将容器内部端口映射到外部集合
4. 运行docker-compose 项目
docker-compose up -d
启动成功后在浏览器输入linux地址就能看到nginx页面
5. 参考文章:
5. Dockerfile自定义镜像
docker 用别人的镜像就已经很方便了,能用自己的镜像就更便捷,所以就有Dockerfile
镜像构成
这里我暂时也不是很理解,仅仅提供文章参考;
参考文章:
Dockerfile指令详解
Dockerfile 需要用到很多的指令,而且指令比较多,记录起来比较麻烦,所以推荐用到设么查什么,也只提供文章参考;
参考文章:
Dockerfile 案例
dockerfile 其实很简单,主要是考验个人的linux指令的熟练度,我个人接触linux时间比较短,会得linux指令比较少,所以就列举一个简单的Dockerfile 案例
项目需求:
我们搭建一个java环境的容器,在这个容器里面运行我们的一个只有一个页面的jar包,用Java -jar test.jar 来运行我们的java项目,从而构成一个镜像
这里我们直接列出我的dockerfile 文件,下面再一一解析dockerfile文件里面的指令
#目录结构:
usr
│
└─local
│ │
│ └─docker
│ │
│ └──project
│ │ │ Dockerfile
│ │ │ docker-compost.yml
│ │ │ project.jar
1. 新建Dockerfile文件
vim Dockerfile
Dockerfile内容
FROM openjdk:8-jdk
WORKDIR /data/server
COPY ./project.jar .
EXPOSE 8080
CMD java -jar project.jar
命令说明:
FROM: 指定基础镜像,我们的基础镜像是jdk8,docker会自己去下载对应的镜像
WORKDIR: 指定工作目录(这里的工作目录是docker容器里面的目录,不是我么操作系统的目录)
COPY: 复制文件,我们将操作系统里面的jar复制到容器里面的工作目录,’.'指的是当前目录
EXPOSE: 暴露端口,将容器内部的端口暴露给Docker
CMD: 启动容器命令,在启动容器的时候会执行的操作命令
2. 构建镜像
命令格式:
docker build [选项] <上下文路径/URL/->
命令:
docker build -t myImage:1.0.0 .
说明:
-t: 镜像的名字及标签,我们这里的名字myImage,版本为1.0.0
3. 新建docker-compose.yml模板文件
vim docker-compose.yml
compose内容:
version: "3"
services:
project:
restart: always
container_name: project
image: project
ports:
- 8080:8080
4. 启动我们自己构建的容器
docker-compose up -d
5. 构建成功访问
浏览器就能访问我们的项目地址(ip+端口号)
6. 参考文档
6. 总结
不会写稿,只会说一下自己对docker看法,做为一个开发者,docker对于我们而言大大减少了我们队项目部署和项目维护的难度,同时对于运维人员来说也是一个利器,因为它真的做到了一次部署到处运行,相较于操作系统显得更为强大;我写的都只是入门级别的东西,只是个人的一个笔记而已,其实docker还是有很多复杂的操作值得我们去学习,我相信,如果能熟练掌握好docker,项目部署和维护都将是小问题