1.docker架构




2.docker镜像



3.DIY一个Base Image
3.1创建一个C程序
[root@VM_0_5_centos hello-world]# vi hello.c
#include<stdio.h>
int main()
{
printf("hello docker\n");
}
3.2编辑一个DockerFile
[root@VM_0_5_centos hello-world]# vi Dockerfile
FROM scratch
ADD a.out /
CMD ["/a.out"]
FROM表示我们从一个IMAGE之上在构建一个IMAGE,我们这里要创建的是BASE IMAGE,所以使用scratch。接下来我们把a.out放到根目录中去。CMD表示command,执行这个a.out。
3.3构建一个image
docker build -t mikezzmeric/zzmhello .
mikezzmeric是docker hub的id,zzmhello是image的名字。.表示在当前目录找这个DockerFile
3.4看看image
[root@VM_0_5_centos hello-world]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mikezzmeric/zzmhello latest 5bd84d2ccf89 10 seconds ago 865kB
<none> <none> 1b59162f99e5 14 minutes ago 865kB
ubuntu latest 775349758637 6 days ago 64.2MB
redis latest de25a81a5a0b 3 weeks ago 98.2MB
ubuntu 14.04 2c5e00d77a67 5 months ago 188MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
[root@VM_0_5_centos hello-world]# docker history 5bd84d2ccf89
IMAGE CREATED CREATED BY SIZE COMMENT
5bd84d2ccf89 23 seconds ago /bin/sh -c #(nop) CMD ["/a.out"] 0B
686c93892c23 15 minutes ago /bin/sh -c #(nop) ADD file:34fc852f9c01fd251… 865kB
[root@VM_0_5_centos hello-world]#
3.5执行镜像
[root@VM_0_5_centos hello-world]# docker run mikezzmeric/zzmhello
hello docker
3.6删除镜像
docker image rm image的id 或者 docker rmi image的id
4.认识Container

4.1查看当前本地正在运行的容器
docker container ls
4.2查看正在运行和已退出的容器
docker container ls -a 或者 使用docker ps -a
4.3删除container
docker container rm 指定id 或者 docker rm 指定id
4.4查看所有container的id
docker container ls -aq 或者 docker container ls -a | awk {'print$1'}
4.5删除所有container
docker rm $(docker container ls -aq)
4.6查看所有已经退出的容器的ID
docker container ls -f "status=exited" -q
5.构建docker镜像
docker container commit(可以简写为docker commit)

docker image build (可以简写为docker build)
6.Dockerfile语法梳理
6.1 FROM

一个原则:尽量使用官方的image作为base image
6.2 LABEL

MetaData不可少,类似于代码中的注释
6.3 RUN


6.4 WORKDIR

尽量使用WORKDIR,而不是要使用RUN cd,尽量使用绝对目录
6.5 ADD and copy
把本地的文件放到image中去


6.6 ENV

尽量使用ENV增加可维护性
6.7 RUN vs CMD vs ENTRYPOINT



6.7.1 CMD

6.7.2 ENTRYPOINT

7 镜像的发布
7.1 登录
[root@VM_0_5_centos docker]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: mikezzmeric
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
7.2发布
[root@VM_0_5_centos docker]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mikezzmeric1/zzm-entrypoint latest bf34cf7b2e14 30 minutes ago 220MB
mikezzmeric/zzmhello latest 5bd84d2ccf89 2 days ago 865kB
redis latest de25a81a5a0b 3 weeks ago 98.2MB
centos latest 0f3e07c0138f 5 weeks ago 220MB
ubuntu 14.04 2c5e00d77a67 5 months ago 188MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
[root@VM_0_5_centos docker]# docker push mikezzmeric/zzmhello:latest
The push refers to repository [docker.io/mikezzmeric/zzmhello]
11a9b96284a9: Pushed
latest: digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7 size: 527
查看页面

7.3拉取docker
[root@VM_0_5_centos docker]# docker pull mikezzmeric/zzmhello
Using default tag: latest
latest: Pulling from mikezzmeric/zzmhello
525184e594e6: Pull complete
Digest: sha256:a28fbf1671d8f42b6956951645f5fd91947ba54dd5e81c6d44ee6cc547c316d7
Status: Downloaded newer image for mikezzmeric/zzmhello:latest
docker.io/mikezzmeric/zzmhello:latest
7.4 搭建一个私有registry
docker run -d -p 5000:5000 --restart always --name registry registry:2
详情可以参考https://hub.docker.com/_/registry
这样我们的镜像就是往我们自己的服务器上去放,而不是放到docker hub上面啦
8 Docker File实战
8.1 创建一个app.py文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "hello docker"
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
8.2 创建Dockerfile
FROM python:2.7
LABEL maintainer="zhouzm"
RUN pip install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 5000
CMD ["python", "app.py"]
8.3 构建image
docker build -t mikezzmeric/flask-hello-demo .
8.4 运行
docker run -d mikezzmeric/flask-hello-demo
8.5 与运行中的容器进行交互
docker exec -it 容器id /bin/bash
我们的容器里面也装好了python,所以交互命令也可以用以下方式输入:
docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 python
查看容器的IP地址
docker exec -it dd9ac31eacc955786fc8152fa891a8cfc5448a1db056483c9306de470279fbe2 ip a
8.6停掉正在运行的容器
docker stop containerId
8.7 用特定的名字启动和关闭容器
[root@VM_0_5_centos flask-hello-world]# docker run -d --name zzm mikezzmeric/flask-hello-demo
7a116d84b245714405f7eb45557ab6969894d0be5515c72fe527c8035b4a2bda
[root@VM_0_5_centos flask-hello-world]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 2 seconds ago Up 2 seconds 5000/tcp zzm
[root@VM_0_5_centos flask-hello-world]# docker stop zzm
zzm
[root@VM_0_5_centos flask-hello-world]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 42 seconds ago Exited (137) 23 seconds ago zzm
[root@VM_0_5_centos flask-hello-world]# docker start zzm
zzm
[root@VM_0_5_centos flask-hello-world]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a116d84b245 mikezzmeric/flask-hello-demo "python app.py" 51 seconds ago Up 3 seconds 5000/tcp zzm
8.8 显示容器的详细信息
docker inspect 容器id或者名称
8.9查看容器运行时的一些日志
[root@VM_0_5_centos flask-hello-world]# docker logs zzm
网友评论