惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
S
Securelist
P
Proofpoint News Feed
H
Help Net Security
S
Schneier on Security
T
Tenable Blog
C
Cisco Blogs
S
Security @ Cisco Blogs
博客园 - 司徒正美
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
Google DeepMind News
Google DeepMind News
C
Cybersecurity and Infrastructure Security Agency CISA
Google Online Security Blog
Google Online Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
aimingoo的专栏
aimingoo的专栏
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
腾讯CDC
WordPress大学
WordPress大学
Simon Willison's Weblog
Simon Willison's Weblog
Vercel News
Vercel News
小众软件
小众软件
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
雷峰网
雷峰网
Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
博客园 - 聂微东
F
Full Disclosure
量子位
Scott Helme
Scott Helme
宝玉的分享
宝玉的分享
A
About on SuperTechFans
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Schneier on Security
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
Kaspersky official blog
AI
AI
SecWiki News
SecWiki News
Webroot Blog
Webroot Blog
Martin Fowler
Martin Fowler

Liu Zijian's Blog | 一个技术博客

使用Certbot自动续签HTTPS证书 使用Filebeat采集Nginx日志到ES Python的协程 Python中的异常 Python中的类和对象 Python的函数 Python的数据结构,推导式、迭代器和生成器 Spring AI集成多模态模型 LangChain4j多模态 LangChain Tools工具使用 Python中的模块和包 Python全局环境和虚拟环境(venv) LangChain Prompt提示词工程 LangChain4j Tools工具使用 基于Dify搭建AI智能体应用 LangChain4j RAG检索增强生成 Spring AI实现MCP Server Spring AI集成MCP Client LangChain4j Prompt提示词工程 Spring AI使用知识库增强对话功能 Spring AI实现一个智能客服 Spring AI实现一个简单的对话机器人 实现MinIO数据的每日备份 自己实现一个DNS服务 简单理解AI智能体 大模型和大模型应用 LangChain开篇 LangChain4j开篇 一个解析Excel2007的POI工具类 DataPermissionInterceptor源码解读 TenantLineInnerInterceptor源码解读 BaseMultiTableInnerInterceptor源码解读 Spring AI开篇 SQL解析工具JSQLParser 芋道源码解读之多租户 芋道源码解读之数据权限 芋道源码解读开篇 Java实现将数据导出为Word文档 OA系统的天数该怎样计算 安装MySQL8 安装MySQL5.7 RockyLinux9环境下编译MySQL8 MySQL字符集及底层原理 Java实现LDAP登录 Docker Compose IPv4和IPv6 使用虚拟机安装一个K8s集群 使用GraalVM原生编译打包SpringBoot工程 Nginx防止目录穿越 Java线程的状态 Nginx防盗链设置 使用python将excel表格转换为SQL INSERT Redis的公共操作命令 Redis数据结构之Bitfleid Redis数据结构之Bitmap Redis数据结构之GEO Redis数据结构之Hash Redis数据结构之HyperLogLog Redis数据结构之List Redis数据结构之Set Redis数据结构之Stream Redis数据结构之String Redis数据结构之ZSet 使用python压缩图片 利用Python实现Hexo站点的持续集成 Nginx设置HTTPS监听 firewalld防火墙工具的使用 Linux信号(signal)机制 MySQL5.7x 主从复制 用IP自签发一个HTTPS证书 基于Hexo实现一个静态的个人博客 RockyLinux9环境下编译MySQL5.7 Docker离线安装 MySQL数据定义语言 Docker与联合文件系统 Docker的网络 Docker的镜像操作 MySQL存储过程 MyBatis-Plus开篇 MySQL变量 MySQL视图 MySQL事务 MySQL插入修改和删除 MySQL查询 MySQL系统命令 Docker的容器操作 Docker的安装和配置 Docker容器数据卷 浅谈OAuth2.0授权原理 JVM开篇 浅谈Linux(Unix)的I/O模型 一个通用的CloseableHttpClient工厂类 JUC可重入锁ReentrantLock JUC读写锁ReadWriteLock Java的单例 Java泛型 Java8的新特性 最近最少使用算法(LRU) MySQL函数 SpringBoot配置和启动
Docker的容器操作
Liu Zijian · 2023-10-17 · via Liu Zijian's Blog | 一个技术博客

因阿里云加速服务调整,从镜像仓库中拉取镜像时,需要科学上网访问DockerHub

1.容器

Docker容器是基于Docker镜像创建的一个运行实例。它是应用程序运行的隔离环境,类似于虚拟机,但更轻量和高效。与虚拟机相比,容器不需要包含操作系统的完整内核,而是共享宿主机的操作系统内核。容器只包含应用运行所需的最小依赖项,从而大幅降低资源占用。容器之间相互隔离,每个容器拥有自己的文件系统、进程空间、网络接口等。

容器启动速度极快(通常是秒级),因为它无需加载完整的操作系统。

2.容器常见操作

2.1 新建并启动容器

容器由镜像实例化启动,启动容器时会先寻找镜像,如果本地没有容器会向远端拉取。

启动容器的方式有很多种。

1.前台启动容器

docker run 镜像名:版本

2.后台运行容器

即启动守护式容器,返回容器ID。容器后台-d运行时,必须有一个前台进程,如果容器运行的命令不是那些一直挂起的命令,例如toptail,容器会自动退出,这个是docker机制的问题,例如nginx,正常情况下启动服务只需要启动对应的service,systemctl start nginx,但是这样做nginx在后台运行,导致docker前台没有运行的应用,docker认为无事可做,便会退出。最佳的解决方案是让你的应用以前台进程的方式运行。

docker run -d 镜像名:版本
[root@localhost ~]# docker run -d sonatype/nexus3:3.54.1
516d486e69d863c41e41fc5e908ffb40350c662966b3790c7868225b0684e126

3.以交互模式运行容器,通常配合-t使用

docker run -i 镜像名:版本

4.为容器重新分配一个伪终端,通常配合-i使用

docker run -t 镜像名:版本

5.以交互式建立容器

指定运行的终端/bin/bash

docker run -it 镜像名:版本 /bin/bash

如果镜像的默认命令(通过 CMD 或 ENTRYPOINT 指定)是交互式的Shell(例如 /bin/bash 或 /bin/sh),那么bash/bin/bash可以省略,Docker会直接运行默认命令,比如ubuntu默认会运行/bin/bash

docker run -it ubuntu

输出结果:容器ubuntu开始运行,并自动切换到容器中的/bin/bash root@c067a19d427c:/#

[root@localhost ~]# docker run -it ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
afad30e59d72: Pull complete 
Digest: sha256:278628f08d4979fb9af9ead44277dbc9c92c2465922310916ad0c46ec9999295
Status: Downloaded newer image for ubuntu:latest
root@c067a19d427c:/# 

6.随机端口映射

docker run -P 镜像名:版本

7.指定端口映射,有以下四种形式

  • ip:hostPort:containerPort
    将容器内的 containerPort 映射到指定主机的 hostPort,并绑定到特定的 IP 地址。
  • ip::containerPort
    将容器内的 containerPort 映射到随机的主机端口,并绑定到特定的 IP 地址
  • hostPort:containerPort
    将容器内的 containerPort 映射到主机的 hostPort,不指定绑定 IP。
  • containerPort
    将容器内的 containerPort 映射到主机的随机端口,绑定到主机的所有网络接口。
docker run -d -p 13306:3306 镜像名:版本

8.运行并为容器指定一个新名字

docker run -d --name="mynexus" sonatype/nexus3:3.54.1

9.环境变量

使用-e指定环境变量,这些环境变量可以被容器内的应用程序所访问到

docker run -e MY_ENV=production my_image

指定多个

docker run -e VAR1=value1 -e VAR2=value2 my_image

2.2 查看运行的容器

正在运行的

docker ps 
[root@localhost ~]# docker ps -a 
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                       PORTS                                                      NAMES
508a327eac81        1bb6f28b9d23                    "docker-php-entrypoi…"   14 months ago       Exited (137) 13 months ago                                                              frosty_ritchie
be633e9bd4b0        1bb6f28b9d23                    "docker-php-entrypoi…"   14 months ago       Exited (137) 14 months ago                                                              epic_brattain
0d6691a51729        1bb6f28b9d23                    "docker-php-entrypoi…"   14 months ago       Exited (137) 14 months ago                                                              pedantic_liskov
02efe5a0233f        redis:7.0.11                    "docker-entrypoint.s…"   16 months ago       Exited (0) 14 months ago                                                                redis7
ae8dd5ed8c76        prom/prometheus:latest          "/bin/prometheus --c…"   17 months ago       Exited (0) 17 months ago                                                                prometheus
d380ff361ad5        nacos/nacos-server:v2.2.3       "bin/docker-startup.…"   17 months ago       Exited (143) 17 months ago                                                              nacos-standalone
ed47411ae068        grafana/grafana:latest          "/run.sh"                17 months ago       Exited (0) 17 months ago                                                                grafana
1b297c5ff801        portainer/portainer-ce:latest   "/portainer"             17 months ago       Up About an hour             0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp, 9000/tcp   portainer
5aed508fc491        sonatype/nexus3:3.54.1          "/opt/sonatype/nexus…"   17 months ago       Exited (137) 17 months ago                                                              nexus
6c365985f133        gitlab/gitlab-ce:latest         "/assets/wrapper"        19 months ago       Exited (137) 17 months ago                                                              gitlab
c5b4c8217fc0        mysql:5.7                       "docker-entrypoint.s…"   19 months ago       Exited (0) 14 months ago                                                                mysql5.7
3951414b08ba        kibana:7.4.2                    "/usr/local/bin/dumb…"   4 years ago         Exited (0) 19 months ago                                                                kibana
eaff1b448829        elasticsearch:7.4.2             "/usr/local/bin/dock…"   4 years ago         Exited (143) 19 months ago                                                              elasticsearch

现在和历史运行过的容器

docker ps -a 

最近n个运行过的容器

docker ps -n 2

只显示容器编号

docker ps -q  
[root@localhost ~]# docker ps -q
1b297c5ff801

不截取输出

docker ps  --no-trunc   
[root@localhost ~]# docker ps  --no-trunc
CONTAINER ID                                                       IMAGE                           COMMAND             CREATED             STATUS              PORTS                                                      NAMES
1b297c5ff8019abf47c6fe6bf23cc93507835ba98c1b0a88d4e92f52b1bab4c9   portainer/portainer-ce:latest   "/portainer"        17 months ago       Up About an hour    0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp, 9000/tcp   portainer

2.3 容器的停止

1.停止容器

docker stop 容器ID

2.启动容器

docker start 容器ID

3.重启容器

docker restart 容器ID

4.立刻停止容器

docker kill 容器ID

2.4 操作运行中的容器

1.docker attach进入容器

进入一个正在运行的容器,附加到其主进程的标准输入、输出和错误流,看到容器中运行的程序的实时输出,并直接与容器的主进程交互,例如正在运行top的容器,可以看到top实时输出,还可以输入命令和top交互。

docker attach 容器ID

2.docker exec -it进入容器

进入一个正在运行的容器,在运行的容器中启动一个新进程,通常是交互式Shell,不依赖容器的主进程,可以独立运行,不影响容器的主进程运行。

如果容器指定了默认shell,那么bash部分/bin/bash可省略。

docker exec -it 容器ID /bin/bash

3.exit 停止并退出容器

当你进入容器后,完成任务并希望关闭容器时使用,当通过docker exec或docker attach进入容器后,输入exit会停止运行的Shell进程,如果这个进程是容器的主进程(例如一个 Bash 会话或主要的服务进程),exit 会直接停止整个容器。

4.Ctrl+P+Q 停止并退出容器

从一个已附加的容器中退出交互界面,同时容器继续运行。当需要离开容器的交互环境,但希望容器继续在后台运行时使用,使用 docker attach 容器ID 附加到容器时,按下Ctrl+P,然后按 Q,会退出到宿主机终端,但是容器仍在运行。

2.5 删除容器

1.删除容器

docker rm 容器ID

2.强制删除容器

docker rm -f 容器ID

3.删除全部容器

docker rm $(docker ps -aq)

2.6 提交容器

通过commit将容器提交为一个新的镜像,具体语法是docker commit -m "描述" -a="作者" 容器ID 新镜像名称:标签

docker commit -m "new image" -a="zuozhe" c54fcba2de61 lzj/alpine:1.0.0

2.7 查看容器的日志

t 时间戳
f 跟随最新日志
--tail 数字,显示最后多少条

docker logs -f -t  容器ID

2.8 查看容器内运行的进程

docker top 容器ID

2.9 查看容器内部的细节

docker inspect 容器ID