Docker 是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库可看成一个代码控制中心,用来保存镜像。类似于Maven的仓库。
# 官方脚本(使用阿里镜像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 国内daocloud一键安装:
curl -sSL https://get.daocloud.io/docker | sh
# 如果有旧版本,先卸载
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 设置yum阿里镜像
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装,先更新yum仓库
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 安装,如果提示您接受 GPG 密钥,请选是。
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动
sudo systemctl start docker
# 测试是否可用
sudo docker run hello-world
# 官方脚本(使用阿里镜像):
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 国内daocloud一键安装:
curl -sSL https://get.daocloud.io/docker | sh
# 如果有旧版本,先卸载
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt包索引
sudo apt-get update
# 安装apt依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
# 设置稳定版仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 更新apt包索引
sudo apt-get update
# 安装最新版本的 Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 测试是否可用
sudo docker run hello-world
也可以从官方仓库网页搜:https://hub.docker.com/
# 返回值说明:
# NAME: 镜像仓库源的名称
# DESCRIPTION: 镜像的描述
# OFFICIAL: 是否 docker 官方发布
# stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
# AUTOMATED: 自动构建。
docker search ubuntu
# 下载镜像
docker pull ubuntu:13.10
# 查看镜像信息
## 返回值说明:
## REPOSITORY:镜像的仓库源
## TAG:镜像的标签
## IMAGE ID:镜像ID
## REATED:镜像创建时间
## SIZE:镜像大小
docker images
在Docker中,有两种方式可以指定某个镜像:
REPOSITORY:TAG
IMAGE ID
,当引用IMAGE ID
时可以使用简写,即只输入IMAGE ID
前两位数即可。如果存在多个镜像简写的值一致,则使用简写时会报错。# -t: 终端
# -i: 交互式操作
# -d: 后台运行,多个参数可以在一起写: -itd
# -p: 端口映射,80:8080表示宿主机的80端口映射容器的8080端口。
# 即访问宿主机80端口相当于访问容器8080端口。该参数可重复使用进行多端口映射。
# --name , test为自定义容器名
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
# 如果用/bin/bash报错,则用/bin/sh
docker run -t -i -d --name test openjdk:11 /bin/bash
# 以下命令效果相同
# 这里的 f5 就是这个镜像的IMAGE ID:f5de33dc9079的简写
docker run -itd f5 /bin/bash
docker run -tid f5de33dc9079 /bin/bash
docker rmi openjdk
如果下载的镜像名称太长,我们可以通过docker tag
命令重新给镜像打个标签(有重命名的效果,但不是真正的重命名)。
docker tag
命令本文先不进行详细介绍了,有兴趣的小伙伴可以访问文章开头的官网或者菜鸟教程学习哦~
docker tag openjdk:11 myjdk:1
在Docker中,我们有两种方式可以指定某个容器:
NAME
,容器名,启动镜像时指定。IMAGE ID
,当引用IMAGE ID
时可以使用简写,即只输入IMAGE ID
前两位数即可。如果存在多个容器简写的值一致,则使用简写时会报错。# 默认只查看运行中的
docker ps
# 查看所有
docker ps -a
# 启动
docker start test
# 重启
docker restart 242480ce4d72
# 停止
docker stop 24
docker rm test
进入容器就相当于进入一个Linux系统一样,只是为了让镜像更轻便,这些Linux系统的工具会非常少,只有最基础的命令,绝大部分连vi
命令都没有,需要手动安装。
而根据镜像所选的基础系统不同,安装工具也不同:
· 基于Ubuntu系统的通过apt
命令安装。
· 基于RedHad系统的通过yum
命令安装。
进入容器后,如果需要退出容器,输入 exit 回车即可
# -t: 终端
# -i: 交互式操作
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
## 如果用/bin/bash报错,则用/bin/sh
docker exec -it myubuntu /bin/bash
使用docker logs
查看容器日志。
# -f 动态加载,即有新日志时会实时加载出来
# --tail 100 只加载最后100行
# | grep **** 搜索指定字符并输出其所在行
# > temp.txt Linux中 '>' 代表输出, '<'代表输入
# 这里的意思就是将输出的值存入当前目录的temp.txt文件中
# 以上所有选项按需选择即可
docker logs -f --tail 100 myubuntu | grep 博主真帅 > temp.txt
如果需要检查容器的配置文件,尤其是当容器启动失败时,我们可以通过使用docker inspect
命令查看容器信息,找到该容器在宿主机中的路径。
在下图中,通过docker inspect myubuntu | grep Dir
命令可以找到红框中的值:/var/lib/docker/overlay2/eaafdf5cb63f8180ab5e26036d6e3acc2ab518ad8ca9a0d597dd106712878557即容器所在的路径。有些容器中并没有merged目录,因此我们cd
到其父目录下肯定是可以的。
# 输出`myybuntu`容器的详细信息
docker inspect myubuntu
# | grep Dir 只输出包含'Dir'字符的行
docker inspect myubuntu | grep Dir
# 查看所有已启动的容器的资源消耗情况
docker stats
# 查看指定容器的资源消耗情况
docker stats myubuntu
# 查看指定容器的进程信息
docker top myubuntu
# 查看所有容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
# 将名字为 myubuntu 的容器设置为开机自启
docker container update --restart=always myubuntu
官网仓库:https://hub.docker.com/_/mysql?tab=tags
需要提一下的是,如果是有一定数据量或压力的生产环境,最好还是不要用Docker运行Mysql,毕竟中间有个Docker,所以性能方面肯定是没有直接安装在服务器上的好。在本地或者测试环境就无所谓了。
# 不指定TAG时,默认下载最新版
docker pull mysql
# 指定标签
docker pull mysql:8.0.20
# 搜索可用版本
docker search mysql
# 运行镜像
# -e 自定义参数, 这些参数在上述官网中有详细描述
# MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
docker run -itd --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 查看是否运行成功
docker ps
安装步骤与安装Mysql大同小异
# 不指定TAG时,默认下载最新版
docker pull redis
# 指定标签
docker pull redis:6.0.5
# 搜索可用版本
docker search redis
# 运行镜像
docker run -itd --name redis6 -p 6379:6379 redis
# 查看是否运行成功
docker ps
本文简单介绍了Docker的基本使用,后面有时间再整理Dockerfile
和Docker Compose
相关的知识点。
相对于文章开头对Docker架构/优点等文字性的描述,相信大家在实际操作后对Docker会有更深刻的认识。
如果本文对你有所帮助,记得双击么么哒~