1.image常识:
image是分层的,每一层都可以添加,改变,删除文件,称为一个新的image,
不同的image可以共享相同的layer,image本身是read-only的,查看分层:
docker history [imageid]
2.image的获取有三种方法:
i.使用docker pull方式从dockerhub获取(hub.docker.com);
ii.使用Dockerfile构建
iii.在container的基础上构建
3.常用命令:
docker image ls #简写 docker images
docker image rm [imageid] #简写 docker rmi [imageid]
docker pull [username]/imagename:version
4.使用Dockerfile构建hello-world镜像:
i.编写hello.c:
#include<stdio.h>
int main(){
printf("hello docker\n");
}
ii.安装需要的工具并编译hello.c:
yum install gcc
yum install glibc-static
gcc -static hello.c -o hello
iii.新建Dockerfile文件:
FROM scratch
ADD hello /
CMD ["/hello"]
iv.使用Dockerfile构建镜像:
docker build -t hurricane123/hello-world . # docker build是docker image build的简写,从Dockerfile构建一个image
v.执行构建好的镜像:
docker run hurricane123/hello-world
5.使用dockerhub发布镜像:
docker login #需要在hub.docker.com上注册用户
docker push hurricane123/hello-world:latest #hurricane123必须为自己的用户名
6.创建私有docker仓库:
i.使用registry镜像即可:
docker -d -p 5000:5000 --restart always --name registry registry:2
ii.在/etc/docker目录下向daemon.json中添加:
{"insecure-registries":["private-registry-ip:private-registry-port"]}
iii.在/lib/systemd/system/docker.service中添加EnvironmentFile=-/etc/docker/daemon.json
如下:
...
ExecStart=/usr/bin/dockerd
EnvironmentFile=-/etc/docker/daemon.json
ExecReload=/bin/kill -s HUP $MAINPID
...
iv.现在就可以向私有docker仓库推送docker镜像了:
docker push [private-registry-ip]:[private-registry-port]/[imageName]
v.通过私有库的api(通过浏览器访问)可以查看已经成功提交的image:
private-registry-ip:private-registry-port/v2/_catalog
参考:
视频教程:系统学习Docker 践行DevOps理念