前言
「实践出真知」,话不多说,直接开干!
环境:
centos # 1、vmare自己搭一个 2、阿里云或者腾讯云买一个,新用户很便宜的
docker
docker 安装
# 在线安装
yum install docker
Dockerfile
在home/demo目录创建一个Dockerfile
# An example Dockerfile for installing Git on Ubuntu
FROM ubuntu:latest
LABEL maintainer="dia@allingeek.com"
RUN apt-get update && apt-get install -y git
ENTRYPOINT ["git"]
构建镜像
命令最后有个. 注意看!!!
# -t 指定镜像名称
# -f 制定Dockerfile所在的目录
# . 代表指定镜像构建过程中的上下文环境的目录
docker build -t test/myapp -f /home/demo/Dockerfile .
查看镜像是否构建成功
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/myapp latest ce7b2e1448f3 39 hours ago 198 MB
运行容器
docker run myapp
# 成功输出git命令 就表示ok了
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
docker ps -a 代表曾经来过
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c87b12a5334 test/myapp "git" 3 minutes ago Exited (1) 3 minutes ago silly_lichterman
恭喜你!完成了第一关的考验!come on!
docker 简介
Docker是一个用于开发、交付和运行应用程序的开放平台。Docker能够将「应用程序从基础设施中分离出来,可以快速交付软件」。使用Docker就可以像「管理应用程序一样管理基础设施」。通过利用Docker技术「快速交付」、「测试」和「部署代码」的优势,可以显著「减少编写代码和在生产环境中运行代码之间的时间」。
镜像(images)与容器(container)
镜像就像一个安装包 容器就是安装好之后的软件,你可以启动、停止、删除它
容器与虚拟机
容器在宿主机上运行,并与其他容器共享主机的内核。本质上是一个运行的进程,不占用比任何其他可执行文件更多的内存,这使得它是轻量级
的。
相对的,虚拟机(VM)运行一个完整的操作系统,通过管理程序虚拟访问主机资源。通常,虚拟机会产生比应用程序所消耗的更多的开销。
容器启动流程
Docker Engine
Docker Engine是一个客户端-服务器应用程序,具有以下主要组件:
1、一个长期运行的后台服务,称为守护进程(dockerd命令)。
2、一个REST API,应用程序与守护进程对话并指示它做什么的接口。
3、一个命令行工具(CLI,docker命令)。
Docker Registries
docker registry
是存储镜像的仓库。Docker Hub
是任何人都可以使用的公共镜像仓库,默认情况下docker
会从Docker Hub
里面去查找镜像。同时用户可以自定义私有的仓库。 当使用docker pull
或者docker run
命令的时候,会从配置好的镜像仓库去拉取指定镜像。docker push
命令则会将镜像推送到配置的仓库。
Docker 使用
镜像操作
# 镜像搜索 不实用,没法获取镜像tag。推荐直接去Docker Hub上查找
docker search
# 拉取镜像 docker pull centos
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 镜像列表 docker images # 删除镜像 docker rmi hello-world docker rmi # 设置新的版本号 docker tag hello-world:latest hello-world:1.0.0 docker tag # 导出镜像 docker save -- docker save命令只能打包镜像,没有压缩 -- 可以使用gzip -c压缩(会延长加载时间)# docker save hello-world:latest | gzip -c > hello_v3.tar.gz -- save时最好指定版本/tag # 导入镜像 docker image load -i hello_v3.tar.gz docker load -i # 推送镜像 docker push host:port/hello-world:1.0.0 docker push -- push可以将本机镜像推送到特定镜像仓库 -- 比如公共Docker Hub(需要docker login)或者私有仓库(Docker Registry,指定host和port) # 清除所有tag为 <none> 的镜像 docker rmi $(docker images | grep "<none>" | awk -F' ' '{print $3}') 或者 docker images|grep "<none>" | awk '{print $3 }'| xargs docker rmi --force # 删除未使用镜像 docker image prune
容器操作
# 查看镜像列表
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 831691599b88 5 weeks ago 215 MB
# 运行容器 docker run docker.io/centos 或者 docker run 831691599b88 # 查看正在运行的容器 docker ps # 停止容器 docker stop # 重启容器 docker restart # 查看容器日志 docker logs # 查看容器详细信息 docker inspect # 移除容器,如果正在运行,先暂停容器 docker rm # 移除所有不在运行的容器 docker container prune # 停止所有容器 docker ps -aq | xargs docker stop # 移除所有容器 docker ps -aq | xargs docker rm # 移除所有已退出容器 docker ps -a | grep "Exited" | awk '{print $1 }'| xargs docker rm # 备份容器到镜像,生成一个容器的快照 docker commit -p 831691599b88 container-backup
参考
https://poleljy.gitee.io/iCoding/
https://docs.docker.com/engine/reference/run/
本文使用 mdnice 排版