基本使用方法

使用docker仓库

  • 首先,docker的一个镜像是由多层组成的,每一层一个id,在pull的时候可以看到

  • 以下面为例,imageID是镜像的唯一id,但是镜像的完整id是第三行的sha256哈希值,使用docker images 指令的时候,默认id的位数显示是截断的,可以后跟参数–no-trunc=true来显示全部

    1
    2
    3
    4
    5
    REPOSITORY          TAG                 IMAGE ID
    ubuntu latest 94e814e2efa8
    Digest: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499
    从官方下载,默认 docker pull <image>:<tag>
    如果从第三方下载,需要在仓库前指定完整仓库地址(例如hub.c.163.com/public/<image>:<tag>)
  • 如果感觉DockerHub慢的话,可以使用镜像代理 https://registry.docker-cn.com。

    1
    2
    3
    4
    5
    6
    /etc/systemd/system/docker.service.d/http_proxy.conf 
    [Service]
    Environment="HTTPS_PROXY=https://registry.docker-cn.com"
    然后
    systemctl daemon-reload,先reload units,重新加载一下配置单元,再重启docker服务
    systemctlrestart docker
  • 除了docker images,还有一个docker inspect <image>:<tag> 查看详细信息(json)

  • docker history <image>:<tag>查看历史信息

    1
    2
    3
    4
    5
    6
    7
    8
    [
    {
    "Id": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499",
    "RepoTags": [
    "ubuntu:latest"
    ]
    }
    ]

基本操作,搜索,删除,清理本地遗留文件,创建自己的镜像等

  • docker search搜索镜像,也是按关键字来的。(你搜docker search mysql可以搜到MariaDB
  • docker image prune -f,强删本地垃圾。

    创建

  • 基于本地已有镜像创建,docker commit,和git格式差不多
1
2
3
4
5
6
格式:docker commit -m 'message' -a 'authorname' <changed imageid or name> <yourimage>:<tag>
docker commit -m 'add one file' -a 'waynamigo' c4b6b5b3e7d8 myimage:waynamigo

ps:另外两个参数为
-c 执行dockerfile,在后面整理
-p 提交时暂停容器的进程
  • 基于本地模板导入(只用了OpenVZ提供的一个linux模板搞了一下,准备有时间拿上学期的floppylinux的文件弄一个镜像
1
cat <filename> | docker import - <image>:<tag>,后者为自定义的名字,导入成功后会显示镜像id
  • 基于dockerfile创建镜像,下面是一个demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM centos #指定基镜像 

MAINTAINER waynamigo #该镜像维护者的信息(我)

COPY jdk1.8.0_79 jdk1.8.0_79 #从centos复制jdk,(竟然没有openjdk。。。还得配置环境变量
ADD <localfile> # 跑了一个jar。。

ENV JAVA_HOME=/jdk1.8.0_79
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

EXPOSE 8080 #开放8080端口,其实不用写,因为jar里面已经把yml的配置打包好了

ENTRYPOINT ["java","-jar","/filename"]
1
2
3
docker build -t waynamigo:webapp .
生成后就可以创建容器并运行了
docker run -p localhost:8080:8080 --name webapp_running waynamigo:webapp
  • 不放心的话可以进去康康
    1
    2
    3
    docker run -it waynamigo:webapp# 运行这个docker容器
    top # 看进程
    lsof -i:8080 # 或者看端口占用

保存镜像

  • 导出到本地,格式类似gcc++

    1
    docker save <image>:<tag> -o xxx.tar
  • 如果要重新导入,使用

    1
    2
    docker load -i xxx.tar
    docker load < xxx.tar

上传镜像

  • 还是git,docker push
1
2
3
4
5
6
7
先commit
docker commit -a <authorName> -m <commitInfo> <containerId> <image>:<tag>

或者是单独打tag
docker tag <image>:<tag> waynamigo/<image>:<tag>
然后push
docker push waynamigo/<image>:<tag>