一、常见的Docker命令
所有Docker命令手册
https://docs.docker.com/engine/reference/commandline/docker/
https://docs.docker.com/engine/reference/commandline/docker/
根据正在运行的容器制作出相关的镜像:反向
根据镜像启动一个容器:正向
有了Docker:
先去软件市场搜镜像:https://registry.hub.docker.com/ docker hub
- 下载镜像 docker pull xxx
- 启动软件 docker run 镜像名;
- 对于镜像的所有管理操作都在这一个命令: docker image --help
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
镜像是怎么做成的。基础环境 + 软件
redis 的完整镜像应该是: linux 系统 +redis 软件
alpine :超级经典版的 linux 5mb ; + redis = 29.0mb
没有 alpine3 的:就是 centos 基本版
以后自己选择下载镜像的时候尽量使用
alpine: slim: docker rmi -f $(docker images -aq) #删除全部镜像 docker image prune #移除游离镜像 dangling:游离镜像(没有镜像名字的) docker tag 原镜像:标签 新镜像名:标签 #重命名 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] docker create [设置项] 镜像名 [启动] [启动参数...] docker create redis: 按照redis:latest镜像启动一个容器 docker kill是强制kill -9(直接拔电源); docker stop #可以允许优雅停机(当前正在运行中的程序处理完所有事情后再停止) docker create --name myredis -p 6379(主机的端口):6379(容器的端口) redis -p port1:port2 #port1是必须唯一的,那个是没关系的。 docker run --name myredis2 -p 6379:6379 -p 8888:6379 redis :默认是前台启动的,一般加上-d 让他后台悄悄启动, 虚拟机的很多端口绑定容器的一个端口是允许的 docker run -d == docker create + docker start 启动了 nginx ;一个容器。 docker 容器里面安装了 nginx ,要对 nginx 的所有修改都要进容器: docker attach 绑定的是控制台. 可能导致容器停止。不要用这个 docker exec -it -u 0:0 --privileged mynginx4 /bin/bash: 0用户,以特权方式进入容器 docker container inspect 容器名 = docker inspect 容器 docker inspect image /network/volume ....
一般运行中的容器会常年修改,我们要使用最终的新镜像
docker commit -a lansonli -m "first commit" mynginx4 mynginx:v4
把新的镜像放到远程docker hub,方便后来在其他机器下载
---------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的连接起来就 能得到启动命令 ----save/load--操作镜像-- docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件 docker load -i busybox.tar 把压缩包里面的内容直接导成镜像 ---------- 镜像为什么能长久运行 镜像启动一定得有一个阻塞的进程,一直干活,在这里代理。 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] docker run --name myredis2 -p 6379:6379 -p 8888:6379 redis 镜像启动以后做镜像里面默认规定的活。 docker run -it busybox; 交互模式进入当前镜像启动的容器 --------- ----产生镜像----- 1、基于已经存在的容器,提取成镜像 2、人家给了我tar包,导入成镜像 3、做出镜像 -1)、准备一个文件Dockerfile FROM busybox CMD ping baidu.com -2)、编写Dockerfile -3)、构建镜像 docker build -t mybusy66:v6 -f Dockerfile . ---做redis的镜像--- FROM alpine(基础镜像) //下载安装包 //解压 //准备配置文件 CMD redis-server redis.conf ---------- build 是根据一个Dockerfile构建出镜像 commit 是正在运行中的容器提交成一个镜像
容器的状态
Created(新建)、Up(运行中)、Pause(暂停)、Exited(退出)
docker run的立即启动,docker create得稍后自己启动
推送镜像
- 注册docker hub并登录
- 可以创建一个仓库,选为public
- docker push lansonli/mynginx:tagname
- docker hub一个完整镜像的全路径是
- docker.io/library/redis:alpine3.13 我们的 docker.io/lansonli/mynginx:tagname
- docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
- docker.io/ rediscommander / redis-commander:latest
- docker.io/lansonli/mynginx:v4 我的镜像的全称
- 登录远程docker仓库
- 当前会话登录以后 docker login 。所有的东西都会push到这个人的仓库
- docker push lansonli/mynginx:tagname
- 上面命令的完整版 docker push docker.io/lansonli/mynginx:v4
怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
docker hub 太慢了,用阿里云的镜像仓库,或者以后的 habor 仓库
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lsl/mynginx: 镜像版 sudo docker push registry.cn-hangzhou.aliyuncs.com/lsl/mynginx:[镜像版本号] 仓库网址/名称空间(lsl/lansonli)/仓库名:版本号