基本概念
- Docker 镜像(Image),就相当于是一个 root 文件系统。
- 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例
一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 - 仓库 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务
基本操作
1. 获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
##例子
docker pull ubuntu:18.04
2. 列出镜像
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 5f515359c7f8 5 days ago 183 MB
nginx latest 05a60462f8ba 5 days ago 181 MB
mongo 3.2 fe9198c04d62 5 days ago 342 MB
<none> <none> 00285df0df87 5 days ago 342 MB
ubuntu 18.04 f753707788c5 4 weeks ago 127 MB
ubuntu latest f753707788c5 4 weeks ago 127 MB
3. 删除本地镜像
docker image rm [选项] <镜像1> [<镜像2> ...]
##例子
docker image rm 501
4. 使用 Dockerfile 定制镜像(spring boot 例子)
# 继承于上层镜像
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER chengJun "cheng.jun@microcardio.com"
# 执行命令
RUN rm -rf /opt/running/mp*
# 将build/libs下的jar包拷贝到容器中的/opt/running/目录
COPY build/libs/*.jar /opt/running/mp.jar
# 工作目录
WORKDIR /opt/running/
# 声明变量
ENV TZ=Asia/Shanghai
# 执行命令, 同步时区
RUN set -eux; \
apk add --no-cache --update tzdata; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone
# 开放端口
EXPOSE 8080
# 启动应用,所需指令
ENTRYPOINT ["java", "-jar", "-Xms128m", "-Xmx256m" , "mp.jar","--spring.profiles.active=develop"]
5. 执行构建 镜像命令
docker build [选项] <上下文路径/URL/->
# 例子
docker build -t mp:c73a15d 'F:\git-data\mp\'
6. 启动容器
# 后台运行, 绑定端口
docker run -d -p 8099:8080 mp:c73a15d
7. 查看容器列表
# -a 可以显示 已终止的容器
docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8977d211434 mp:c73a15d "java -jar -Xms128m …" 8 seconds ago Up 7 seconds 0.0.0.0:8099->8080/tcp agitated_shannon
8. 容器启停
docker container stop f89
docker container start f89
docker container restart f89
9. 查看容器日志
docker logs f89
10. 进入容器
docker attach f89
#例子
docker exec -it f89 tail -f logs/wx-mpp/console.log```
docker exec -it f89 /bin/sh
11. 删除容器
# -f 可以删除一个正在运行中的 容器
docker container rm -f f89
# prune 删除所有处于终止状态的容器
docker container prune
12.仓库相关
仓库(Repository)是集中存放镜像的地方。
一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址
docker.io/ubuntu 来说,docker.io 是注册服务器地址,ubuntu 是仓库名。
Docker Hub
# 登录
docker login
# 退出
docker logout
# 搜索
docker search centos
#拉取
docker pull centos
#推送镜像到仓库
docker push username/ubuntu:18.04
Docker 私仓
使用 Docker 官方的 Registry 创建的仓库面临一些维护问题。比如某些镜像删除以后空间默认是不会回收的,需要一些命令去回收空间然后重启 Registry 程序。在企业中把内部的一些工具包放入 Nexus 中是比较常见的做法,最新版本 Nexus3.x 全面支持 Docker 的私有镜像。所以使用 Nexus3.x 一个软件来管理 Docker , Maven , Yum , PyPI 等是一个明智的选择。
阿里云私仓
地址
进入创建好仓库和注册地址后
#登录
docker login --username=XXXXXXXX@qq.com registry.cn-shenzhen.aliyuncs.com