栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker 基本命令-镜像 && 容器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker 基本命令-镜像 && 容器

镜像 基本概念

我们都知道,操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。
Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

常用命令 拉取镜像

命令格式

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

拉取mysql
从dao上拉取 版本号是8.0.20的mysql的镜像

docker pull daocloud.io/library/mysql:8.0.20

查看镜像

命令

docker images;

可以查看到刚刚拉取下来的mysql镜像

镜像重命名

命令

docker tag be0dbf01a0f3 mysql:8.0.20

可以看到将镜像的名称修改为mysql,但其image ID 其实还是一样的,所以两个其实是同一个镜像,只是名称不一样

导出本地镜像
docker save -o mysql.image be0dbf01a0f3

参数解释:
-o: output
mysql.image导出的镜像名称
be0…:需要导出的镜像id

可以看到在docker文件夹下已有导出的docker镜像,其文件名为mysql.image

删除镜像

删除镜像之前,需要把应用该镜像的容器先停止并删除容器

命令

// docker rmi imageId
docker rmi be0dbf01a0f3 -f

执行删除命令之后,再次使用docker images 命令查看可以发现,当前已经没有mysql镜像了

导入镜像

命令

// docker load -i 镜像名称
docker load -i mysql.image

-i:表input

在当前docker文件夹目录下执行上述命令,image id和之前id是一样的,可以给这个镜像重命名和设置tag

查看历史

命令

docker history imageId

容器 基本概念

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

常用命令 创建并运行容器

命令

docker run xxx
运行mysql镜像
// 5.7.25版本
docker run -d -p 3307:3306 --name mysql_muse -e MYSQL_ROOT_PASSWORD=servyou@muse 98455b9624a9
// 8.0.20版本
docker run -d -p 3308:3306 --name mysql_muse8.0.20 -e MYSQL_ROOT_PASSWORD=servyou@muse be0dbf01a0f3

-d: 守护进行,在后台运行
-p:端口的映射,宿主机的端口/容器的端口
3307是宿主机的端口(本机对外暴露的端口,别的机器通过这个端口连接数据库)
3306指的是当前启动容器的端口
–name: 给容器设置个名称,这里的名称就叫mysql
-e: mysql的密码, 这里是给root用户设置的密码为 servyou@muse
最后跟着是镜像id

运行centos系统
docker run -it 300e315adb2f /bin/bash


运行nginx
// 运行nginx
docker run -d -p 80:80 --name trident-web-1.2.0 6fca7654d0ab

// 阿里云服务器运行nginx容器并与阿里云宿主机挂载容器卷
docker run -d -p 80:80 --name hexo-blog -v /root/workspace/hexo-blog:/usr/webapp nginx
运行node容器
docker run -p 4000:4000 --name hexo -it 1d88d89c7230 /bin/bash

// 宿主80端口映射容器4000端口,直接访问域名,就会转到容器内部的4000端口的服务了
docker run -p 80:4000 --name hexo -it 1d88d89c7230 /bin/bash
重启容器
docker restart + id
docker restart 60d763cdb56a

停止容器 停止单个容器
docker stop + containerId
docker stop 38eb55a92d74

停止所有容器
docker stop $(docker ps -q)
查看容器 查看所有运行中的容器
docker ps

查看所有的-包括停止的
docker ps -a

查看最近运行过的容器
docker ps -l

删除容器 删除单个容器
docker rm +id
docker rm 69541657497a

删除一个已近存在的容器,删除这个容器之前,需要先stop不然会收到如下错误


删除所有容器
docker rm $(docker ps -aq)
停止并删除所有容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
进入容器内部
docker exec -it 容器id sh
docker exec -it fc29bdda6386 sh

# 有的Dockerfile追加了 CMD /bin/bash 那就不用加后面的这个 /bin/bash 否则需要加的,不然就会kill itself
docker exec -it 容器id /bin/bash

attach

docker attach containerID

docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。而使用exec的方式进入容器,exit出来之后,该容器可以正常运行

退出容器

新建镜像

如果我们运行一个容器,比如是ngnix, 此时运行的是一个从官网拉下来的标准配置的ngnix,我们在运行的容器中按需修改了一些配置,此时我们可以提交该容器成为新的镜像,新的镜像就可以包含我们修改的一些配置。以后就可以以此为新的镜像启动。

docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]

等将一个容器打成新的镜像之后,又可以将整个新的镜像导出出去,供给别人使用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号