docker容器常见操作

目录

一、认识容器

1.1、docker用到的内核技术

1.2、namespace

1.3、Control Group

1.4、LXC与docker区别

二、docker环境准备

2.1、安装docker

2.2、docker daemon环境管理

三、镜像、容器和仓库

3.1、镜像常见操作

3.2、配置镜像加速器 命名空间

3.3、非官方镜像仓库

四、用harbor搭建企业级镜像仓库

4.1、harbor

4.2、安装harbor

五、容器常见操作

运行容器并交互式操作

提交镜像docker commit 

批量删除所有容器


一、认识容器

k8s是船舵  引领 docker 

大型机-小型机-PC服务器-虚拟化-云计算-容器

linux容器技术是一种轻量级的虚拟化技术。

主要特点有:

1、轻量:只打包了需要的bins/libs(也就是命令和库文件),与宿主机共享操作系统,直接使用宿主机的内核。

2、部署快:容器的镜像相对于虚拟机的镜像更小,部署更快,秒级部署。

3、移植性好:一次构建,随处部署运行。

4、资源利用率更高:相对于虚拟机,不需要安装操作系统,所以几乎没有额外的cpu和内存消耗


1.1、docker用到的内核技术

docker就是目前最火热的能实现容器技术的软件,使用go(golang)语言开发。

一共是三个版本:docker(2017年之前的老版本不建议使用)、docker-ce和docker-ee

参考:https://www.docker.com/

docker容器本质上是宿主机的进程,可以把docker容器内部跑的进程看作是宿主机的线程

Docker通过namespace(命名空间)资源隔离
通过cgroups实现了资源限制

1.2、namespace

Linux内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服务。在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知。
Linux在很早的版本中就实现了部分的namespace,比如内核2.4就实现了mount namespace。大多数的namespace支持是在内核2.6中完成的,比如IPC、Network、PID、和UTS。还有个别的namespace比较特殊,比如User,从内核2.6就开始实现了,但在内核3.8中才宣布完成。
同时,随着Linux自身的发展以及容器技术持续发展带来的需求,也会有新的 namespace被支持,比如在内核4.6中就添加了Cgroup namespace。
Linux内核提拱了6种namespace隔离的系统调用,相当于目录

IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信
PID:每个容器都拥有独立的进程树,而容器是物理机中的一个进程,所以容器中的进程是物理机的线程
Net:每个容器的网络是隔离Mount:每个容器的文件系统是独立的
User:每个容器的用户和组ID是隔离,每个容器都拥有root用户


小结:应用程序运行在一个隔离的空间(namespace)内,每个隔离的空间都拥有独立的UTS,IPC,PID,Net,Mount,User.
 

1.3、Control Group
 

控制组(CGroups)是Linux内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争。控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理。

1.4、LXC与docker区别


LXC为Linux Container的简写。可以提供轻量级的虚拟化.
Docker的底层就是使用了LXC来实现的. dockerl以LXC为基础,实现了更多更强的功能。


二、docker环境准备

建议直接在宿主机上跑docker(当然也可以在虚拟机里跑docker)
不能直接接在windows上跑docker(因为namespace,cgroup是linux内核的特性,windows没有,所以需要在windows跑linux虚拟机,再跑docker)
1.要求能访问公网
2.关闭防火墙,selinux
 

2.1、安装docker

下载docker官网的镜像源或者阿里云的源 wget

yum clean all 

yum install docker-ce -y

docker version 可以查看客户端和服务端

2.2、docker daemon环境管理

可以将客户端和服务端进行分离实现远程docker连接,必须对docker daemon进行相应配置才能实现。配置完成需要重载 docker daemon -reload

远程客户端# docker -H 容器宿主机IP version(远程连接客户端)

三、镜像、容器和仓库

镜像(image):镜像就是打包好的环境与应用

容器 (container):容器就是运行镜像的实例,镜像是静态的,容器是动态的

仓库(repository):存放多个镜像的一个仓库

docker host 就是运行docker的宿主机

3.1、镜像常见操作

镜像分为两类:

1、操作系统类 (centos/ubuntu)        2、应用程序类

docker search 镜像名称  

可以查看所有镜像,official(官方的仓库)

docker pull 镜像名称  拉取镜像

使用docker load < 重定向导入之前保存好的镜像

docker save 镜像名称 -o 镜像存放目录  (意思就是测试一下先save保存到其他文件夹之后rmi删除,然后从其他文件夹导入镜像,也能理解成恢复备份

3.2、配置镜像加速器 命名空间

vim /etc/docker/daemon.json

在docker守护进程的json文件中配置阿里镜像源或者其他的国内源加速

注意:配置文档可能重复创建/etc/docker目录

3.3、非官方镜像仓库

首先第一步就是和docke hub官方仓库一样 登录 docker login (非官方仓库必须加地址)

退出仓库 docker logout 需要退出的仓库地址,默认是docker hub

例如阿里云:

在阿里云镜像仓库先创建命名空间之后创建镜像名称

注意:上传镜像必须打标签才能上传

四、用harbor搭建企业级镜像仓库

4.1、harbor

Harbor是VMware公司开源了企业级Registry项目,可以帮助用户快速搭建一个企业级的Docker registry服务.
harbor由python语言开发,需要使用docker-compose工具进行启动
 

需要的工具:

使用epel源安装pip,使用pip安装docker-compose

安装完成docker-compose之后检查一下是否拥有可执行权限

查看服务器架构:加上 可执行符合 单引号即可执行查看(常用于写shell)

4.2、安装harbor

建议使用离线包安装

下载地址: https://github.com/goharbor/harbor/releases

千篇一律地把安装包上传到服务器之后tar  xf 解压,然后进入/usr/local/harbor/

修改配置文件 vim harbor.cfg  主要就是hostname是主机名,admin用户的登录密码默认了,直接./install.sh 安装即可

在docker宿主机配置daemon.json文件
因为docker用https通讯,所以还需要做证书,太麻烦。
配置"insecure-registries": ["harbor服务器IP"]来使用http通讯

tag给镜像打标签之后才能push上传,上传又发现docker是用https协议通讯所以必须修改daemon.json文件

如果不先docker login 登录harbor服务器就无法push推送

五、容器常见操作

把容器比喻为轻量级虚拟机,但是容器实际上只是进程。进程运行完了当然就退出了,除非是类似服务那样的守护进程
 

docker运行一个不间断的脚本,-d表示后台运行(后台运行表示不输出结果到屏幕)

例如容器ip等信息

运行容器并交互式操作

如果是简单的run运行容器不进行交互,容器不是持续运行的进程所以不会在后台运行,加上-d也不会,在容器中写一个循环持续运行才能

交互式运行容器命令:-it 直接运行并进入容器,exit能退出容器但是后台运行的进程也退出了

交互式容器退出之后如何查看或修改之前在容器里创建的文件?

容器进程退出之后可以使用docker start 容器id 启动,先使用docker ps -l 查看退出的容器信息

主要区别在于它们如何与容器交互以及它们所启动的进程类型。

  1. Docker attach(只能连接up状态的容器):

    • 使用 `docker attach` 可以将当前控制台连接到一个正在运行的容器中。
    • 它允许用户执行命令并在容器内部查看输出。
    • 如果从连接的终端退出,容器也将被终止。
  2. Docker exec:
    • 用户可以使用 `-D` 参数让命令在后台运行,而不占用终端。
    • 它会在容器中启动一个新的进程(终端),并执行指定的命令,这样就不会中断容器的其他活动。
    • `docker exec` 用于在运行的容器中执行命令,而不是直接在容器的当前进程上启动新的终端。

提交镜像docker commit 

批量删除所有容器

一次性删除大量测试容器必须先停止docker stop $(docker ps -qa)才能删除docker rm $(docker ps -qa)   rmi是删除镜像

需要注意的是交互式启动容器之后如果该容器中没有运行可持续的进程则容器不会是up状态

<think>好的,用户想了解Docker容器的常规操作方法,特别是常用命令和使用指南。我需要根据提供的引用内容来整理这些信息。首先,我应该分几个主要部分来组织回答,比如容器生命周期管理、网络配置、数据管理、日志和监控,以及GPU容器操作等。引用1、2、3、4都提到了不同的命令,需要整合这些内容,确保覆盖全面。 首先,容器生命周期管理包括运行、启动、停止、删除等。根据引用4,运行容器可以使用docker run,并提到端口映射和后台运行的参数。引用2里也有运行容器和重启的命令,比如docker restart。停止容器docker stop,删除docker rm,这些在引用2和3都有提到。 然后是镜像管理,引用2提到查看镜像、下载镜像、搜索镜像,对应的命令是docker images、docker pull、docker search。删除镜像用docker rmi,引用3也有涉及。 网络配置方面,引用2提到了查看网络、创建网络、删除网络,使用docker network相关的命令。数据管理部分,引用1和2都提到了数据卷,比如docker volume create和挂载数据卷到容器,这需要详细说明。 日志管理在引用1中提到docker logs,监控资源使用可以用docker stats和docker top,这些在引用2和3里都有。另外,进入容器执行命令用docker exec,这也是常用的。 GPU容器操作是引用2的重点,需要单独列出来,比如使用--gpus参数运行容器,并给出示例命令。另外,运行Jupyter服务的例子也可以提一下,帮助用户理解应用场景。 还要注意命令的语法正确性,比如端口映射是-p参数,数据卷挂载是-v,环境变量是-e。引用4中的nginx示例可以作为一个实战案例,说明如何运行一个web服务器。 需要确保回答结构清晰,每个部分用小标题,命令用代码块,并且按照用户的要求,行内数学表达式用$...$,但这里可能用不上。最后生成相关问题,可能涉及性能优化、常见错误解决、数据持久化方法、容器网络配置等。 检查是否有遗漏的重要命令,比如查看容器进程的docker ps,查看容器详细信息的docker inspect,这些在引用2和3里都有提到。另外,数据卷的备份和恢复虽然用户没直接问,但属于常规操作,可以简要提及。 最后,确保所有引用来源正确标注,比如引用1是关于日常维护命令,引用2包含GPU容器操作,引用4提供了运行容器的具体案例。需要将这些信息整合成一个连贯的指南,帮助用户快速掌握Docker容器的常用操作。</think>### Docker容器常规操作指南 #### 一、容器生命周期管理 1. **运行容器** ```bash # 基础运行(带交互终端) docker run -it --name my_container ubuntu:20.04 /bin/bash # 后台运行并映射端口(Web服务示例) docker run -d -p 8080:80 --name nginx_web nginx [^4] # 带环境变量和自动删除 docker run -e MYSQL_ROOT_PASSWORD=123456 --rm mysql:8.0 ``` 2. **启停与删除** ```bash docker start/stop/restart my_container # 启停与重启 [^2] docker rm my_container # 删除已停止的容器 docker rm -f running_container # 强制删除运行中的容器 [^3] ``` #### 二、镜像管理 ```bash docker images # 查看本地镜像 [^2] docker pull ubuntu:22.04 # 下载镜像 docker search nginx # 搜索镜像仓库 docker rmi ubuntu:20.04 # 删除镜像(需无容器依赖)[^3] ``` #### 三、网络配置 ```bash docker network ls # 查看网络列表 docker network create my_net # 创建自定义网络 [^2] docker run --network=my_net ... # 指定容器网络 ``` #### 四、数据管理 ```bash # 数据卷操作 docker volume create db_vol # 创建数据卷 docker run -v db_vol:/var/lib/mysql ... # 挂载数据卷 [^1] # 目录直接挂载 docker run -v /host/path:/container/path ... ``` #### 五、监控与调试 ```bash docker ps -a # 查看所有容器状态 [^3] docker logs my_container # 查看容器日志(-f实时跟踪)[^1] docker stats # 实时监控资源使用 docker top my_container # 查看容器进程树 ``` #### 六、高级操作 1. **进入容器执行命令** ```bash docker exec -it my_container /bin/bash # 进入bash终端 docker exec my_container ls /app # 执行单次命令 ``` 2. **GPU容器操作(需NVIDIA环境)** ```bash docker run --gpus all nvidia/cuda:11.0-base # 使用全部GPU docker run --gpus '"device=0,1"' ... # 指定GPU设备 ``` #### 七、实战案例 **运行Jupyter服务** ```bash docker run -d -p 8888:8888 -v ~/notebooks:/home/jovyan/work jupyter/tensorflow-notebook --NotebookApp.token='' [^2] ``` #### 八、系统维护 ```bash docker system df # 查看存储占用 docker prune # 清理无用对象(镜像/容器/网络) docker update --restart=always my_container # 设置自动重启 [^1] ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值