----------------------------------------------------------
https://docs.docker.com/engine/referende/commandline/docker
docker 面向对象
镜像(Image) 类
容器(Container) 对象
----------------------------------------------------------
根据正在运行的镜像制作出相关的镜像:反向
根据镜像启动一个容器:正向
1.去镜像市场搜镜像(docker hub)
2.下载镜像docker pull 镜像
3.启动镜像docker run 镜像
---------------------------------------------------------
对于镜像的所有管理操作,都在docker image(s) --help
Docker pull redis == docker pull redis:latest (最新版)
#阿里云的镜像是从docker hub来的 ,我们配置了镜像加速器,默认是从阿里云(缓存)下载的
REPOSITORY(名) TAG(标签) IMAGE ID(镜像ID) CREATED(镜像构建时间) SIZE(大小)
-----------------------------------------------------
#镜像是怎么做成的:基础环境+软件
redis的完整镜像应该是:linux系统+ redis软件
alpine:超级经典的linux 5mb +redis =29.0mb
没有alpine3的,就是centos基本版
#以后自己选择下载镜像的时候
alpine
----------------------------------------------------
docker rmi 镜像名 删除镜像 docker rmi -f 强制删除镜像
docker ps -a 查看所有镜像
先停止容器,才能在删除镜像
----------------------------------------------------
busybox镜像封装了centos的许多工具
docker rmi -f $(docker images -aq) #删除全部镜像
docker image prune #移除游离镜像
------------------------------------------------
docker tag 原镜像:标签 新镜像:标签 镜像ID一样同一个镜像,名称不同
docker create redis 创建一个容器,依据redis镜像,需要手动启动
docker create --name myredis -p 6379(主机端口):6379(容器端口) redis
只是创建,没有启动 docker start ID 或者容器名
docker pause 停止一个容器 docker unpause 重启一个容器
容器的状态
create 创建 pause 停止 up启动 unpause 重启
docker kill 是强制删除 docker stop 优雅停止
--------------------------
-p Port1:Port2
port1是必须的唯一的,port2是没关系的
docker run --name myredis2 -p 6379:6379 -p 8888:6379 redis 依托reids镜像 启动并创建一个容器,不需要手动启动
默认是前台启动的,一般加上-d 让他后台悄悄启动
docker run -d ==docker create + ddocker start
docker容器(小型的linux系统)
----------------------------------------
docker logs 容器名 查看容器之前在前台输出的日志
前台查看的日志都可以在docker logs 里面查看
docker logs -f nginx 追踪查看日志
-------------------------------------
#启动了nginx 一个容器,docker容器里面安装了nginx,要对nginx的所有修改都要进容器
docker attach 绑定的是控制台,如果绑定的控制台停止,会导致停止容器
docker exec --help 进入容器的方式
docker exec -it -u 0:0 容器名(ID) -u 0:0 以特权方式进入
docker exec -it -u 0:0 --privileged mynginx /bin/bash
exit推出容器,退出并不会导致容器停止
---------------------------------------
docker container inspect 容器名
docker image inspect 镜像
--------------------------------------
docker cp 容器和外部相互复制
docker cp 文件 容器:路径 把外部的文件复制进去
docker cp 容器:路径 文件 把容器的文件复制出来
-----------------------------------
diff 检查容器里面的文件的更改(增删改查)
docker commit 把容器的改变提交创建一个新的镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a 容器名 -m "first commit" mynginx mynginx:v4
#一般运行中的容器会常年修改,我们要使用最终的新镜像就需要用到docker commit
#把新的镜像放到自己的仓库,方便使用与保存
游离镜像(空悬镜像):none
--------------------------------------
推送镜像
1.注册docker hub 并登录
2.可以创建一个仓库,public
3.docker hub 一个完整镜像的全路径
4.docke.io/libary/redis:alpine3.13 我们的docker.io/xy/mynginx:tagname
5.docker images 的时候缩略了全名,默认了官方镜像没有docker.io/libary
6.docker.io/xy/mynginx:v4 我的镜像的全称
7.登陆远程docker仓库
8.当前会话登录以后docker login ,所有的东西都会push到这个人的仓库
9.docker push 全称xy/mynginx:v4
10.怎么知道是否登陆了:cat ~/.docker/config.json 看有没有auth的值
docker hub的仓库可能太慢了,可以创建一个自己的仓库,或者使用阿里云等的docker仓库
-----------------------------------------
docker export 导出镜像
docker export [OPTIONS] CONTAINER
docker export -o nginx.tar 容器
docker import 导入镜像 导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker export导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令
1.查看容器之前的启动命令
2.docker ps --no-trunc
3.docker image inspect 镜像 查看之前的镜像,把之前镜像的entrypoint+cmd 连接起来的命令
4.运行示例:docker run -d -p mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'
---------------------------------------------
save和
docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o busybox.tar busybox:latest 把busybox
docker load -i(读取文件) busybox.tar
docker load [OPTIONS]
可以直接运行
--------------------------------------------
镜像为什么能够长久运行
镜像启动一定的又一个阻塞的进程,一直干活,在这里做代理
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name myredis2 -p 6379:6379 redis
镜像启动以后做镜像里面默认规定的话
docker -it redis :以交互模式进入当前镜像启动的容器
docker run -d busybox ping www.baidu.com 容器运行之后一直在后台ping百度
--------------------------------------------
Dockerfile
1.基于已经存在的容器,,提取出镜像
2.人家给的tar包,导入成镜像
3.制作镜像
1).准备一个文件Dockerfile
2).编写Dockerfile
3).构建镜像
docker build -t mynginx:v6 -f Dockerfile .
---------------------------------------------