1.docker 命令关系图

图片.png
根据正在运行的容器制作出相关的镜像:反向
根据镜像启动一个容器:正向
有了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

  1. docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来
  2. docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去
  3. docker cp index.html mynginx4:/usr/share/nginx/html
  4. docker cp mynginx4:/etc/nginx/nginx.conf nginx.conf

4.2 docker commit

  1. [root@yangc ~]# docker commit -a yangchao -m "first commit" mynginx mynginx:v1
  2. sha256:0ba3e1e995c75a66c8ec3f63cf4bfe7fd685b024ac5c5a0924e6f5bfdbffab51
  3. [root@yangc ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. mynginx v1 0ba3e1e995c7 11 seconds ago 133MB
  6. nginx latest f8f4ffc8092c 6 days ago 133MB
  7. [root@yangc ~]
  8. 底层使用的就是 git
  9. #把新的镜像放到远程docker hub,方便后来在其他机器下载
  10. 连续两次同样的提交,就会产生游离镜像

5. 推送镜像

推送镜像

  1. 注册docker hub并登录 docker login — docker logout
  2. 可以创建一个仓库,选为public
  3. docker push yangchaolove/mynginx:tagname
  4. docker hub一个完整镜像的全路径是 docker.io/library/redis:alpine3.13
  5. 我们的 docker.io/yangchaolove/mynginx:tagname
  6. docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
  7. docker.io/rediscommander/redis-commander:latest 非官方镜像
  8. docker.io/leifengyang/mynginx:v1 我的镜像的全称
  9. 登录远程docker仓库 当前会话登录以后 docker login 。

    所有的东西都会push到这个人的仓库
    docker push yangchaolove/mynginx:v1
    需要保证路径名一致
    image.png image.png
    上面命令的完整版 docker push docker.io/yangchaolove/mynginx:v1
    怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
    docker hub太慢了,用阿里云的镜像仓库,或者以后的habor仓库

    1. $ docker login --username=yangchaolove registry.cn-chengdu.aliyuncs.com
    2. $ docker tag [ImageId] registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:[镜像版本号]
    3. $ docker push registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:[镜像版本号]
    4. #示例
    5. $ docker login --username=yangchaolove registry.cn-chengdu.aliyuncs.com
    6. $ docker tag mynginx:v1 registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:v1
    7. $ docker push registry.cn-chengdu.aliyuncs.com/yangchaolove/mynginx:v1

    6. export操作容器/import

    1. docker export
    2. 导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令
    3. docker ps --no-trunc),然后再用下面启动。
    4. docker run -d -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'
    5. 或者docker image inspect 看之前的镜像,把 之前镜像的 Entrypoint的所有和 Cmd的连接起来就
    6. 能得到启动命令

    image.png

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

会阻塞在redis-server
image.png

9.Docker 制作镜像

  1. FROM busybox # 基础镜像
  2. CMD ping baidu.com

docker build -t mybusy66:v6 -f Dockerfile .
image.png

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 文件加载镜像