1.指令
镜像
-
启动docker
systemctl start docker -
显示docker系统信息
docker info -
登录docker仓库服务
docker login docker.io
-
搜索镜像
docker search alpine -
拉取镜像
docker pull alpine
docker pull alpine:3.10.3
docker pull docker.io/library/alpine:3.10.3镜像的名字构成:注册名字(仓库在哪注册的) / 仓库名字 / 镜像名 : 标签名
-
查看已安装的镜像
docker images
docker image ls
-
创建容器,运行镜像
docker run hello-world -
将指定镜像保存成 tar 归档文件
docker save 4b614599c521 > alpine:latest_with_1.txt.tar -
从tar文件恢复镜像
docker load < alpine:latest_with_1.txt.tar -
删除镜像
通过镜像ID的方式删除,若存在多个tag引用了这个镜像,要加-f
删除
docker rmi f70734b6a266
docker rmi -f f70734b6a266
docker rmi docker.io/gaoyangofchendu/alpine -
为镜像打标签
docker tag f70734b6a266 docker.io/gaoyangofchendu/alpine:latest -
推送镜像到Dockerhub
docker push docker.io/gaoyangofchendu/alpine:latest -
查看镜像/容器的元数据信息
docker inspect 0e26dab0a7ab
容器
-
查看所有容器
docker ps -a -
运行容器
docker run -ti docker.io/alpine /bin/sh(启动时,运行指令/bin/sh)
docker run --rm docker.io/alpine:latest /bin/echo hello
docker run -ti --name myalpine docker.io/alpine_1.txt /bin/sh
docker run --rm --name mynginx -d -p81:80 docker.io/nginx:v1.12.2
docker run -d --rm --name nginx_with_baidu -d -p82:80 -v/root/html:/usr/share/nginx/html docker.io/nginx:v1.12.2
docker run --rm -e E_OPTS=asdf docker.io/alpine:latest printenv
- run命令参数
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i:以交互模式运行容器,通常与 -t 同时使用;
–rm:退出容器以后,自动删除容器。即在docker ps -a中看不到了
–name:启动容器时,为容器取一个名字
-d:后台启动
-p:端口映射 宿主:容器
-v:目录映射 宿主:容器
-e:启动容器时,为容器指定环境变量
- run命令参数
-
进入运行中的容器
docker exec -ti a24bb4013296 /bin/sh -
启动/停止/重启已有的容器
docker start/stop/restart a24bb4013296 -
删除容器
docker rm 7d90955a9202
docker rm -f 7d90955a9202 -
以当前容器创建新的镜像
docker commit -p c4924b5d4e85 docker.io/alpine_1.txt-p :在commit时,将容器暂停。
-
查看容器的运行日志
docker logs -f 0e26dab0a7ab
Dockerfile
Dockerfile:包含了构建docker镜像源码的文件
-
通过Dockerfile创建镜像
docker build . -t docker.io/gaoyangofchendu/alpine:latest_with_my
通过当前路径下的Dockerfile创建docker.io/gaoyangofchendu/alpine:latest_with_my镜像-t: 镜像的名字及标签
-
FROM
Dockerfile的第一个非注释行指令必须是FROM,用于指明镜像构建过程中的基准镜像FROM docker.io/nginx
-
USER
指定运行容器时的用户名或 UID,默认是rootUSER nginx
-
WORKDIR
用户的工作主目录,默认是根目录WORKDIR /usr/share/nginx/html
-
ADD
把资源添加到镜像里ADD index.html /usr/share/nginx/html/index.html
-
EXPOSE
镜像需要暴露的端口(对应启动容器时 -P)EXPOSE 80
-
ENV
构建镜像时指定环境变量ENV JAVA_HOME /data/soft/jdk1.8.0_65
-
RUN
构建镜像时执行的指令RUN yum install -y httpd
-
CMD
启动容器时执行的指令CMD ["httpd","-D","FOREGROUND"] #httpd -D FOREGROUND
-
ENTRYPOINT
启动容器时执行的脚本。默认是/entrypoint.shENTRYPOINT /xxx.sh #/xxx.sh是镜像内的路径
FROM docker.io/nginx
USER nginx
WORKDIR /usr/share/nginx/html
docker build . -t docker.io/gaoyangofchendu/nginx:latest_dockerfile
docker run --rm -ti --name nginx123 docker.io/gaoyangofchendu/nginx:latest_dockerfile /bin/bash
FROM docker.io/nginx
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
docker build . -t docker.io/gaoyangofchendu/nginx:latest_with_index
docker run --rm -d --name nginx123 -P docker.io/gaoyangofchendu/nginx:latest_with_index
2.配置
- /etc/docker/daemon.json
“registry-mirrors”: [“http://hub-mirror.c.163.com”]
3.原理
容器的生命周期
- 检查本地是否存在镜像,不存在就从远程仓库检索
- 利用镜像启动容器
- 分配一个文件系统,并在只读的镜像层外挂载一层可读写层
- 从宿主机配置的网桥接口中桥接一个虚拟接口到容器
- 从地址池配置一个IP地址给容器
- 执行用户指定的指令
- 执行完毕后容器终止