Docker基础

Docker

  1. 新技术:迫切需要运行环境和os解耦,支持启动即服务镜像
  2. 容器基础操作
bash 复制代码
查看docker版本
docker version

查看docker系统信息
docker info 

查看container信息
docker ps [options]
列出所有运行中的容器
-a 列出所有容器(含沉睡镜像)
-f [exited=<int>] 列出满足exited=<int>条件的容器;
-l 仅列出最新创建的一个容器
--no-trunc 显示完整的容器ID
-n=4 列出最近创建的4个容器
-q 仅列出容器的ID
-s 显示容器大小

创建容器
docker create [options] image:tag
docker create创建的容器处于停止状态,可以用docker start 命令进行启动

启动、停止和重启一个或多个指定容器
docker start|stop|restart [options] <container> [container...]
-a 待完成
-i 启动一个容器并进入交互模式
-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程

杀死一个或多个指定容器进程
docker kill 
docker kill [options] <container> [container...]
-s "KILL" 自定义发送容器的信号

删除一个容器
docker run
docker rm [options] <container> [container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis
-f 移除该容器,即使其正在运行
-l 移除容器间的网络连接,而非容器本身
-v 移除与容器关联的空间

进入一个容器
docker attach/docker exec
docker attach <containername>
docker exec -it <containerId> /bin/bash
attach 命令弹出的窗口同步显示,一个阻塞,其他窗口也无法操作 

启动容器
docker run 
docker run [options] <image> [command] [arg...]
启动一个容器,在其中运行指定命令
-a stdin 指定标准输入输出内容类型,可选STDIN/STDOUT/STDERR 三项
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i 同时使用
--name="nginx-lb"为容器指定一个名称
--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
--dns-search examp.com 指定容器DNS搜索域名,默认和宿主一致
-h "mars" 指定容器的hostname
-e username="ritchie" 设置环境变量
--env-file=[] 从指定文件读入环境变量
--cpuset="0-2" or --cpucet="0,1,2" 绑定容器指定cpu运行
--net="bridge" 指定容器的网络连接类型,支持bridge/host/none container:<name|id>四种类型

其他指令
docker login  登录DockerHub
docker logout 登出DockerHub
docker history <image> 查看指定镜像的构建历史
docker pause|unpause 暂停和恢复指定容器的进程
docker logs <container> 查看指定容器的输入日志 

镜像和容器有什么区别?

镜像和容器的唯一区别在于容器的最上面一层是可读可写的。

要点:容器=镜像+可读层
镜像的基础操作

bash 复制代码
查看镜像
docker images
docker images [options] [name]
列出本地所有镜像,其中[name]对镜像名称进行关键字查询
-a 列出所有镜像 (含过程镜像)
-f 过滤镜像,如:-f ['dangling=true'] 只列出满足dangling=true 条件的镜像;
--no-trunc 可显示完整的镜像ID;
-q 仅列出镜像ID
--tree 以树状结构列出镜像的所有提交历史

查看镜像
检查镜像的详细信息 默认返回JSON格式
docker inspect 
docker inspect image:tag
docker inspect imageId
-f 指定返回值的模板文件

删除镜像
docker rmi
docker rmi [options] <image> [image...]
docker rmi nginx:latest postgres:latest
从本地移除一个或多个指定的镜像
-f 强行移除该镜像,即使其正被使用
--no-prune 不移除该镜像的过程镜像,默认移除

搜索镜像
docker search
docker search [options] term
docker search -S 10 django
从Docker Hub中搜索符合条件的镜像。
--automated=false 只列出自动创建类型的镜像
--no-trunc=false 输出信息不截断显示
-s,--stars=3 仅显示评价为指定星级以上的镜像

下载镜像
docker pull
docker pull name[:tag]
docker pull domain[:port]/name[:tag]
从Docker Hub 中拉取或者更新指定镜像

上传镜像 
docker push 
docker push name[:tag]
docker push domain[:port]/name[:tag]
上传镜像到仓库,默认上传到DockerHub官方仓库

如何给镜像打标签
docker tag
docker tag [name:tag]|[image] newname:tag
给指定的镜像打上新的标签

基于Dockerfile构建镜像
docker build 
docker build [options] path | url | -
docker build -t sun/nginx:2.0 - < Dockerfile
以 Dockerfile为模板构建容器。
--force-rm=false 		构建失败后,移除中间容器
--no-cache=false	 	构建过程不适用缓存;
--rm=true        		构建成功后移除中间容器
-t sun/nginx:2.0 		为创建的容器打上标签

导出镜像
docker save
docker save -o debian.tar [name:tag]|[imageId]
docker save > debian.tar [name:tag]|[imageId]
将指定镜像保存成tar 归档文件,docker load的逆操作。
保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。
-o "debian.tar" 指定保存的镜像归档

导入镜像
docker load 
docker load [options]
docker load < debian.tar
docker load -i "debian.tar"
从tar镜像归档中载入镜像,docker save的逆操作
保存后再加载(saved-loader)的镜像不会丢失提交历史和层,可以回滚
-i "debian.tar" 指定载入的镜像归档。

导出镜像 -2
docker export 
docker export <container>
docker export nginx-01 > export.tar
将指定的容器保存成tar归档文件,docker import的逆操作
导出后导入(export-imported)的容器会丢失所有的提交历史,无法回滚。

导入镜像 -2
docker import
docker import url | -[repository[:tag]]
cat export.tar | docker import - imported-nginx:latest
docker import http://example.com/export.tar
从归档文件(支持远程文件)创建一个镜像,export 的逆操作,可为导入镜像打上标签。
导出后导入(exported-imported)的容器会丢失所有的提交历史,无法回滚。


如何构建,提交镜像 
docker commit
docker commit [options] container [repository[:tag]]
docker commit -a 'bocloud' 4d5d6fd tomcat:8.0
-a,--author="作者信息"
-m,--message="提交信息"
-p,--pause=true       提交时,暂停容器运行

一个简单的Dockerfile

bash 复制代码
# This dockerfile use the centos image
#VERSION 2 - EDITION 1
#Author:docker_user
#第一行必须指定基于的基础镜像
FROM centos
#维护者信息
MAINTAINER  bocloud
#镜像的操作指令
RUN echo "hello docker" >>/etc/apt/firstdocker
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#容器启动时的执行指令 
CMD /user/sbin/nginx

Dockerfile常用指令

bash 复制代码
FROM <IMAGE[:TAG]>   	指定基础镜像
MAINTAINER  <NAME> 		维护者信息
RUN ["EXECUTABLE","PARAM1","PARAM2"]	当前镜像基础上执行指令
CMD["EXECUTABLE","PARAM1","PARAM2"]   	指定启动容器时执行的指令,只能有一条
EXPOSE <PORT>[<PORT>...]				指定Docker宿主机暴露的端口号
ENV <KEY> <VALUE> 						指定一个环境变量,后续被RUN命令使用
ADD <SRC> <DEST>						复制指定的SRC到容器中的DEST,相对或绝对路径(文件|目录)
COPY <SRC> <DEST>						复制本地主机的SRC到容器中的DEST,自动创建目标路径

ENTRYPOINT["EXECUTABLE","PARAM1","PARAM2"]  指定启动容器时执行的指令,不可被docker run 覆盖,不可被docker run 覆盖,多个时只有最后一个生效
VOLUME["/DATA"]							创建一个本期或者其他容器的挂载点,数据库,需要保持的数据等
USER daemon								指定运行容器时的用户名或UID 后续的RUN 也会使用指定的用户
WORKDIR PATH							指定配置工作目录
ONBUILD									[指令]配置当所创建的镜像为其他新创建镜像的基础镜像时所执行的操作
相关推荐
qq_364371721 小时前
基于 Docker 容器化环境配置
运维·docker·容器
GentleDevin2 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记3 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee3 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.4 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh4 小时前
DM8配置SSL
数据库·docker·ssl
Cat_Rocky4 小时前
kubernetes ingress粗浅学习
学习·容器·kubernetes
极客先躯5 小时前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶5 小时前
windows安装docker-desk
windows·docker·容器
运维全栈笔记5 小时前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器