1.docker 命令关系图

根据正在运行的容器制作出相关的镜像:反向
根据镜像启动一个容器:正向
有了Docker: 1、先去软件市场搜镜像:https://registry.hub.docker.com/ docker hub
2、下载镜像 docker pull xxx
3、启动软件 docker run 镜像名;
对于镜像的所有管理操作都在这一个命令:docker image —help
2.镜像的一系列命令
docker pull redis == docker pull redis:latest(最新版)
# 阿里云的镜像是从docker hub来的,我们配置了加速,默认是从阿里云(缓存)下载
REPOSITORY(名) TAG (标签) IMAGE ID(镜像id) CREATED(镜像的创建时间) SIZE
redis 5.0.12-alpine3.13 50ae27fed589 6 days ago 29.3MB
redis latest 621ceef7494a 2 months ago 104MB
2.1 镜像是怎么做成的?基础环境+软件
redis的完整镜像应该是: linux系统+redis软件
alpine:超级经典版的linux 5mb;+ redis = 29.0mb
没有alpine3的:就是centos基本版
# 以后自己选择下载镜像的时候尽量使用 alpine slim
3.容器的一系列命令
docker run的立即启动,docker create得稍后自己启动
容器的状态 Created(新建)、Up(运行中)、Pause(暂停)、Exited(退出)
docker kill是强制kill -9(直接拔电源);
docker stop可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止)
4.进入容器的一系列命令
docker attach 绑定的是控制台. 可能导致容器停止。不要用这个
docker exec -it -u 0:0 —privileged mynginx4 /bin/bash: 0用户,以特权方式进入容器 docker run -d -p 80:80 --name mynginx nginx
4.1 docker cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去docker cp index.html mynginx4:/usr/share/nginx/htmldocker cp mynginx4:/etc/nginx/nginx.conf nginx.conf
4.2 docker commit
[root@yangc ~]# docker commit -a yangchao -m "first commit" mynginx mynginx:v1sha256:0ba3e1e995c75a66c8ec3f63cf4bfe7fd685b024ac5c5a0924e6f5bfdbffab51[root@yangc ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmynginx v1 0ba3e1e995c7 11 seconds ago 133MBnginx latest f8f4ffc8092c 6 days ago 133MB[root@yangc ~]底层使用的就是 git#把新的镜像放到远程docker hub,方便后来在其他机器下载连续两次同样的提交,就会产生游离镜像
5. 推送镜像
推送镜像
- 注册docker hub并登录 docker login — docker logout
- 可以创建一个仓库,选为public
- docker push yangchaolove/mynginx:tagname
- docker hub一个完整镜像的全路径是 docker.io/library/redis:alpine3.13
- 我们的 docker.io/yangchaolove/mynginx:tagname
- docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
- docker.io/rediscommander/redis-commander:latest 非官方镜像
- docker.io/leifengyang/mynginx:v1 我的镜像的全称
登录远程docker仓库 当前会话登录以后 docker login 。
所有的东西都会push到这个人的仓库
docker push yangchaolove/mynginx:v1
需要保证路径名一致

上面命令的完整版 docker push docker.io/yangchaolove/mynginx:v1
怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
docker hub太慢了,用阿里云的镜像仓库,或者以后的habor仓库$ docker login --username=yangchaolove registry.cn-chengdu.aliyuncs.com$ docker tag [ImageId] registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:[镜像版本号]$ docker push registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:[镜像版本号]#示例$ docker login --username=yangchaolove registry.cn-chengdu.aliyuncs.com$ docker tag mynginx:v1 registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:v1$ docker push registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:v1
6. export操作容器/import
docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令(docker ps --no-trunc),然后再用下面启动。docker run -d -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'或者docker image inspect 看之前的镜像,把 之前镜像的 Entrypoint的所有和 Cmd的连接起来就能得到启动命令

7. save/load—操作镜像
docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件 docker load -i busybox.tar 把压缩包里面的内容直接导成镜像
不同于 export导出的 ,可以直接启动
8. 镜像为什么能长久运行 ?
镜像启动一定得有一个阻塞的进程,一直干活,在这里代理。
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
docker run —name myredis2 -p 6379:6379 -p 8888:6379 redis
镜像启动以后做镜像里面默认规定的活。docker run -d busybox ping www.baidu.com; 交互模式进入当前镜像启动的容器(此时就会卡住,阻塞在控制台)
8.1 docker image inspect redis
9.Docker 制作镜像
FROM busybox # 基础镜像CMD ping baidu.com
docker build -t mybusy66:v6 -f Dockerfile .
10.docker 主要命令
| 命令 | 作用 | 示例 |
|---|---|---|
| images | 列出所有镜像 | docker images ==docker image ls |
| rmi | 移除一个或者多个镜像 | docker rmi -f $(docker images -aq) |
| prune | 移除游离镜像 | docker image prune 没有镜像名字的 |
| tag | 重命名 | docker tag 原镜像:标签 docker tag mynginx:v1 yangchaolove/mynginx:v1 |
| create | 创建新容器,但并不启动(注意与docker run 的区分) 需要手动启动。start\stop |
|
| pause | 暂停一个或者多个容器 | |
| unpause | 启动暂停一个或者多个容器 | |
| logs | 获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到 | |
| attach | 绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是 一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx…) | |
| exec | 在运行时的容器内运行命令 | |
| diff | 检查容器里文件系统结构的更改【A:添加文件或目录 D:文件或者目录删除 C:文 件或者目录更改】 | |
| commit | 把容器的改变 提交创建一个新的镜像 | 尽量将容器暂停 |
| inspect | 查看镜像详情 | docker image inspect 镜像名 |
| export | 导出容器的文件系统为一个tar文件。commit是直接提交成镜像 export是导出成文件方便传输 (U盘传输) |
|
| import | 导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器。 /docker-entrypoint.sh nginx -g ‘daemon off;’ docker ps —no-trunc 看下之前的完整启动命令再用他 |
|
| save | 把一个或者多个镜像保存为tar文件 | |
| load | 从 tar 文件加载镜像 |
