docker 常用命令

2023年 10月 12日 56.3k 0

1.Docker常见命令【查阅】

手册:docker命令手册

命令 作用
attach 绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx...)
commit 把容器的改变 提交创建一个新的镜像
create 创建新容器,但并不启动(注意与docker run 的区分)需要手动启动。startstop
diff 检查容器里文件系统结构的更改【A:添加文件或目录 D:文件或者目录删除 C:文件或者目录更改】
export 导出容器的文件系统为一个tar文件。commit是直接提交成镜像,export是导出成文件方便传输
images 列出所有镜像
import 导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器。 /docker-entrypoint.sh nginx -g 'daemon ow ;' docker ps --no-trunc 看下之前的完整启动命令再用他
logs 获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到
pause 暂停一个或者多个容器

根据正在运行的容器制作出相关的镜像:反向

根据镜像启动一个容器:正向

有了Docker:

1、先去软件市场搜镜像:registry.hub.docker.com/ docker hub

2、下载镜像 docker pull xxx

3、启动软件 docker run 镜像名;

对于镜像的所有管理操作都在这一个命令:docker image --help

docker交互命令图

2. docker命令解析

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 leifengyang -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 是正在运行中的容器提交成一个镜像

3.推送镜像

image.png

  • 容器状态

    • Created(新建)
    • Up(运行中)
    • Pause(暂停)
    • Exited(退出)
  • 推送镜像

    • 注册docker hub并登录
    • 可以创建一个仓库,选为public
    • docker push linfang/mynginx:tagname
    • docker hub一个完整镜像的全路径是
    • docker.io/library/redis:alpine3.13 我们的 docker.io/linfang/mynginx:tagname
    • docker images的时候镜像缩略了全名 默认官方镜像没有docker.io/library/
    • docker.io/ rediscommander / redis-commander:latest
    • docker.io/linfang/mynginx:v4 我的镜像的全称
    • 登录远程docker仓库
    • 当前会话登录以后 docker login 。所有的东西都会push到这个人的仓库
    • docker push linfang/mynginx:tagname
    • 上面命令的完整版 docker push docker.io/linfang/mynginx:v4
    • 怎么知道是否登录了 cat ~/.docker/config.json 有没有 auth的值,没有就是没有登录
  • docker hub太慢了,用阿里云的镜像仓库,或者以后的habor仓库

    sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/linfang/mynginx:
    [镜像版sudo docker push registry.cn-hangzhou.aliyuncs.com/linfang/mynginx:[镜像版本号]
    
    仓库网址/名称空间(linfang/linfang)/仓库名:版本号
    

    4.典型命令

docker run 常见的options说明:

  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • --name="nginx-lb":为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --restart , 指定重启策略,可以写--restart=awlays 总是故障重启
  • --volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论