1.安装的docker版本
1 2 3 docker -v Docker version 17.03.2-ce
2.查看本地的镜像
3.拉取镜像
4.编写Dockerfile
1 2 3 FROM nginx RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
5.build Dockerfile
1 2 docker build -t . xxx # 镜像的名字
或者
1 2 docker build -f ./Dockerfile . -t xxx:xxxx
bash
1 2 docker run -i -t ubuntu:15.10 /bin/bash
将容器中的8080端口映射到本机的18080端口
1 2 docker run -p 18080:8080 -it xxxx:v1.0.0dev /bin/bash
如果是多个端口,使用多个-p
1 2 -p 18080:8080 -p 18081:8081
参数
1 2 3 -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。 --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间
6.运行
7.查看自己镜像的id
8.列出所有的容器,包括exit状态的容器
9.查看内网ip地址等运行情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 docker inspect id | grep IP "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.5", "IPPrefixLen": 16, "IPv6Gateway": "", "IPAMConfig": null, "IPAddress": "172.17.0.5", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0,
9.请求nginx
1 2 3 curl 172.17.0.5:80 <h1>Hello, Docker!</h1>
10.如果想要镜像不退出,然后进行镜像中
1 2 3 # run ENTRYPOINT ["/bin/bash","-c","cat /hosts.txt >> /etc/hosts && bash /sleep.sh"]
sleep.sh内容
1 2 3 4 5 6 7 #!/usr/bin/env bash while true; do sleep 10000; done
或者
1 2 ENTRYPOINT ["/bin/bash","-c","while true; do sleep 10000; done"]
然后执行
1 2 docker run --network=host xxxx
查看id
进入镜像中
1 2 docker exec -it xxxx bash
11.删除container,先停再删
1 2 3 docker stop 3f6822d8f262 docker rm 3f6822d8f262
12.使用docker命令从pod向宿主机拷贝文件
1 2 docker cp pod_id:/tmp/abc /tmp/
使用docker命令从宿主机向pod中拷贝文件
1 docker cp ./xx-xx pod_id:/home/xxx
13.mac使用docker的时候配置仓库
1 2 3 4 https://registry.docker-cn.com http://docker.mirrors.ustc.edu.cn http://hub-mirror.c.163.com
注意:mac版本docker升级到高版本后Daemon选项没了,需要在docker engine中填写json配置
14.ubuntu配置docker仓库 ,在/etc/docker目录下新建daemon.json,内容
1 2 3 4 { "registry-mirrors": ["https://registry.docker-cn.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://3laho3y3.mirror.aliyuncs.com","http://f1361db2.m.daocloud.io"] }
重启docker服务
1 2 sudo systemctl restart docker
15.查看docker的磁盘使用情况
1 2 3 4 5 6 7 lintong@master:~$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 31 1 19.17GB 19.11GB (99%) Containers 1 1 0B 0B Local Volumes 48 0 0B 0B Build Cache 0 0 0B 0B
清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
1 2 3 4 5 6 7 8 9 docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y Total reclaimed space: 0B
如果有2个镜像的id相同,则删除的时候会报
1 2 3 docker rmi 85f602b72c3c Error response from daemon: conflict: unable to delete 85f602b72c3c (must be forced) - image is referenced in multiple repositories
此时应该找到2个id相同的镜像,然后一个个进行删除
1 2 3 4 docker images | grep 85f602b72c3c xxxxx v0.9.1 85f602b72c3c 6 weeks ago 2.65GB xxxxx <none> 85f602b72c3c 6 weeks ago 2.65GB
删除第一个
1 2 docker rmi xxxxx:v0.9.1
再删除另一个
1 2 docker rmi 85f602b72c3c
15.使用 Docker 容器应该避免的 10 个事情
1 2 3 4 5 6 7 8 9 10 11 1.不要在容器中存储数据 – 容器可能被停止,销毁,或替换。 2.不要将你的应用发布两份 – 一些人将容器视为虚拟机。 3.不要创建超大镜像 – 一个超大镜像只会难以分发。 4.不要使用单层镜像 5.不要为运行中的容器创建镜像 6.不要只使用“最新”标签 7.不要在单一容器中运行超过一个进程 8.不要在镜像中存储凭据 9.使用非root用户运行进程 10.不要依赖IP地址
参考:10 things to avoid in docker containers
16.docker设置时区
1 2 3 4 5 6 7 8 ENV TZ=Asia/Shanghai # ENV TZ=America/Los_Angeles RUN echo ${TZ} > /etc/timezone \ && ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \ && apt update \ && apt install -y tzdata
17.ubuntu镜像换源
1 2 3 4 5 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \ sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \ apt-get clean && \ apt-get update