首页 > 其他分享 >02Docker中的镜像和容器命令

02Docker中的镜像和容器命令

时间:2024-05-29 23:33:33浏览次数:10  
标签:容器 -- nginx 运行 镜像 docker 02Docker

镜像和容器

Docker中有镜像和容器的概念

  • 镜像(Image): Docker将应用程序及其运行所需要的依赖、函数库、环境、配置等文件打包在一起称为镜像即硬盘中的文件
  • 容器(Container): 镜像中的应用程序运行起来并加载到内存中后形成的进程就是容器,一个镜像可以运行多个容器将来形成集群,容器之间数据相互隔离

在这里插入图片描述

通过命令可以实现开机自启: 默认情况下每次重启虚拟机我们都需要手动启动DockerDocker中的容器

# Docker开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

在这里插入图片描述

镜像命令

镜像名称完整格式[repository(镜像名)]:[tag(镜像版本)]: 如mysql:5.7代表5.7版本的MySQL镜像,如果镜像没有指定版本默认是latest(最新版)

  • 一个镜像可以运行多个容器将来形成集群,运行的容器之间数据相互隔离

docker xx --help命令查看命令的具体语法,以下镜像名称均表示完整格式

命令名称描述
docker pull 镜像名称远程拉取镜像到本地
docker images查看本地拉取到的所有镜像
docker save -o 导出的镜像文件的路径 镜像名称将本地的某个镜像导出为一个压缩包
docker load -i 待加载加载镜像文件的路径加载指定路径的镜像文件到本地
docker rmi 镜像名称/镜像Id通过镜像名称或镜像ID删除本地文件的某个镜像

在这里插入图片描述

拉取/查看镜像

需求: 在DockerHub镜像仓库中查看Nginx镜像的名称和版本并拉取

在这里插入图片描述

docker pull nginx: 拉取最新的Nginx镜像

[root@localhost ~] docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
025c56f98b67: Pull complete 
ec0f5d052824: Pull complete 
cc9fb8360807: Pull complete 
defc9ba04d7c: Pull complete 
885556963dad: Pull complete 
f12443e5c9f7: Pull complete 
Digest: sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

docker images: 查看拉取到的镜像

在这里插入图片描述

[root@localhost ~] docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    3964ce7b8458   4 days ago   142MB

导出/加载镜像

docker save/load --help命令查看docker savedocker load的语法

需求: 将Nginx镜像保存为一个压缩包

  • docker save -o [将镜像保存到哪个目标文件(绝对路径或相对路径),目标文件不存在则会自动创建] [本地镜像名称(包括版本)]
# 将镜像导出为一个压缩包
[root@localhost ~]docker save --help
Usage:  docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
  -o, --output string   Write to a file, instead of STDOUT

# 将指定的镜像打包成一个压缩包
docker save -o nginx.tar nginx:latest

需求: 加载导出的nginx.tar压缩包得到nginx镜像

  • docker load -i [镜像压缩文件名(绝对路径或相对路径)]
# 加载文件为一个镜像
[root@localhost ~]docker load --help
Usage:  docker load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
  -i, --input string   Read from tar archive file, instead of STDIN
  -q, --quiet          Suppress the load output
  
# 通过镜像名称/镜像Id删除本地nginx镜像(rmi是remove image的缩写)
docker rmi nginx:latest 
# 运行命令加载文件得到镜像
docker load -i nginx.tar  

容器命令

容器状态及其常见命令

镜像中的应用程序运行起来并加载到内存中后形成的进程就是容器,容器有运行,暂停,停止三个状态

  • 运行: 进程正常运行
  • 暂停: 进程暂停表示CPU不再执行进程,此时操作系统会将容器关联的内存暂存起来,使用unpause命令可以恢复内存空间即让CPU继续执行程序
  • 停止: 进程终止表示直接将进程杀死,此时会回收容器占用的内存和CPU等资源,但还会保留容器的文件系统即镜像
  • 删除: 彻底删除一个容器包括文件系统,-f表示强制删除运行中的容器

创建容器和启动容器的区别: 容器可以创建多个,对于停止的容器只需要再次启动不需要再次创建新的容器

在这里插入图片描述

命令功能
docker run -d --name 容器名称 -p 端口映射 镜像名称根据本地某个镜像创建并运行一个容器
docker pause 容器ID或容器名让一个运行的容器暂停
docker unpause 容器ID或容器名让一个容器从暂停状态恢复运行
docker stop 容器ID或容器名停止一个运行的容器
docker start 容器ID或容器名让一个停止的容器再次运行
docker rm -f 容器ID或容器名彻底删除一个容器,将文件系统也删除,-f 表示删除运行中的容器
docker ps -a默认只会查看所有运行的容器及状态,-a表示all即查看所有运行的和停止的容器及状态
docker exec 容器ID或容器名进入容器执行命令
docker logs [-f] 容器名称查看容器运行日志,-f参数表示在控制台持续输出日志
docker inspect 容器名称查看容器的详情信息如Mounts(挂载信息),端口信息,镜像信息

查看所有运行的容器及状态,格式化输出指定查询的结果字段

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

在这里插入图片描述

命令别名

命令的别名机制,简化命令的输入

# 第一步: 修改/root/.bashrc文件(:wq保存),root可以用~表示
vi /root/.bashrc

# 文件内容
# .bashrc

# User specific aliases and functions
# 命令别名='原始命令'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# 第二步: 执行":wq"保存修改的文件内容

# 第三步: 执行命令使别名生效
source /~/.bashr

创建并运行Nginx容器

docker run -d --name nginx -p 80:80 nginx: 根据nginx镜像文件创建一个nginx容器并运行,一个镜像文件可以创建多个容器

  • docker run: 创建并运行一个容器

  • --name: 指定创建的容器名字要求唯一,如nginx

  • -p: 指定端口映射宿主机端口号(不能冲突):容器端口号(容器之间相互隔离所以端口可以相同), 因为容器是对外隔离的我们不能直接访问,需要通过访问宿主机端口转发到对应容器端口

    • 容器内端口: 由容器内的进程决定,例如MySQL进程默认端口是3306,Nginx进程默认端口是80
    • 宿主机端口: 可以任意指定,一般与容器内保持一致
  • -d:后台运行容器,防止命令霸行现象

  • nginx:创建容器时依据的镜像名称,Docker会根据这个名字先从本地搜索镜像,如果搜索不到会从DockerRegistry中下载镜像

# 第1步去DockerHub搜索nginx镜像仓库及相关信息

# 第2步拉取Nginx镜像
docker pull nginx

# 第3步查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB

# 第4步创建一个Nginx容器并运行
docker run -d --name nginx -p 80:80 nginx

# 第5步查看所有运行中容器
docker ps

# 第6步访问nginx网页地址http://虚拟机地址

# 第7步停止容器
docker stop nginx

# 第8步查看所有运行中的容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 第9步再次启动nginx容器
docker start nginx

# 第10步再次查看所有运行中的容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 第11步查看容器详细信息
docker inspect nginx

# 第12步进入容器查看容器内目录
docker exec -it nginx bash

# 第13步删除容器
docker rm nginx
# 容器运行中时需要强制删除
docker rm -f ngin

在Nginx容器内部修改文件

docker exec -it nginx bash: 进入Nginx容器内部

  • docker exec: 进入容器内部,容器内部会模拟一份阉割版的Linux文件系统,只包含镜像运行时所需的环境和配置以及文件
  • -it: 给当前进入的容器创建一个标准输入/输出终端方便我们与容器交互
  • nginx: 指定要进入的容器名称
  • bash: 指定进入容器后自动执行的命令,bash表示使用Linux终端交互命令如cd命令,执行exit命令从当前容器中退出
[root@localhost ~] docker exec --help
Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
      --env-file list        Read in a file of environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container

需求: 进入Nginx容器内部,在DockerHub中的Nginx镜像页面中查找镜像的根目录,并在/usr/share/nginx/html/index.html文件中添加内容
在这里插入图片描述

Nginx容器内只具备镜像所必须的系统函数库没有vi命令,此时需要使用sed命令替换index.html文件的内容

# 进入nginx程序的根目录
root@310016c9b413:/ cd /usr/share/nginx/html
# 查看nginx根目录下的文件
root@310016c9b413:/usr/share/nginx/html# ls
50x.html  index.html
# 替换index.html文件内容,'s#原始内容#替换内容#g'
sed -i 's#Welcome to nginx#Welcome To My Blog#g' index.html
# 设置index.html文件的编码格式
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

在这里插入图片描述

应用扩展

创建并进入Redis容器

需求: 创建并运行一个Redis容器,并且支持数据持久化

第一步: 在DockerHub拉取Redis镜像,查看Redis镜像文档中的帮助信息,利用docker run命令运行镜像得到一个Redis容器

# --appendonly yes 表示支持数据持久化
docker run -d --name myRedis -p 6379:6379 redis redis-server --appendonly yes

第二步: 进入Redis容器,并执行redis-cli客户端命令存入num=666

# 进入redis容器
docker exec -it myRedis bash
# 执行redis-cli客户端命令
redis-cli
# 存入num=666
set num 666

# 进入容器执行redis-cli命令
docker exec -it myRedis redis-cli

在这里插入图片描述

创建并进入MySQL容器

-e KEY=VALUE: 配置容器内进程运行时的一些参数,KEY和VALUE都由容器内进程决定

  • TZ=Asia/Shanghai表示设置时区;MYSQL_ROOT_PASSWORD=123表示设置MySQL默认密码
# 根据镜像创建一个MySQL容器
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql
  
# 先进入MySQL容器,后访问MySQL客户端
docker exec -it mysql bash
mysql -uroot -p

# 直接访问MySQL客户端
docker exec -it mysql mysql -uroot -p  

在容器内部使用命令直接访问MySQL客户端

在这里插入图片描述

标签:容器,--,nginx,运行,镜像,docker,02Docker
From: https://blog.csdn.net/qq_57005976/article/details/139308234

相关文章

  • 原生WPF使用IOC容器
    1、删除App.xaml中的StartupUri=""2、改造App.xaml.cspublicpartialclassApp:Application{publicApp(){ServiceProvider=GetServiceProvider();}privateIServiceProviderGetServiceProvider(){ServiceC......
  • 容器数据卷
    [root@localhost~]#dockerrun-it--namedocker01yyds/centos[root@a37f3d845ace/]#lsbinhomelost+found optrunsysvardevlibmedia procsbintmpvolume01etclib64mnt rootsrvusrvolume02[root@a37f3d845ace/]#lsbinho......
  • 制作Dcoker镜像
    文章目录一、Docker构建镜像的原理1、镜像分层原理2、Docker的镜像结构3、分层存储原理4、构建命令与层的关系5、最终镜像的创建二、dockercommit构建镜像1、使用场景2、手动制作yum版的nginx镜像2.1、启动一个centos容器,安装好常用的软件以及nginx2.2、关闭nginx后台......
  • P3-P6容器之分类与各种测试
    序列容器 关联式容器 这里讲到的哈希碰撞,是两个元素的存放位置冲突,用链表进行处理;同时hashtable的链表不能太长 以下测试程序之辅助函数 一、序列容器arrayvectorvector容量是两倍增长,当添加元素之后,容量不够,会去内存中找两倍的空间,将之前的元素放入存放。127......
  • 在kubernetes里使用AppArmor限制容器对资源的访问
    目录一.系统环境二.前言三.AppArmor简介四.AppArmor和SELinux的区别五.使用AppArmor限制nginx程序访问目录5.1安装nginx5.2修改nginx的默认主页5.3安装AppArmor实用工具5.4AppArmor规则解释5.5配置AppArmor规则限制nginx程序访问目录六.在kubernetes里使用AppArmor限制容器对......
  • 当一个 Pod 中包含多个容器时,容器间共享一些重要的资源和环境,这使得它们能够更有效地
    1.PID命名空间:Pod中的所有容器共享同一个PID命名空间,这意味着它们可以看到彼此的进程并且可以相互通信。这种共享使得在容器间进行进程管理更加方便。2.网络命名空间:Pod中的所有容器共享相同的网络命名空间,因此它们具有相同的网络标识符和IP地址。这使得它们之间的通信变......
  • docker 容器安装软件
    前提1容器用debianbookworm建立2设置容器代理见之前随笔1:再宿主中建立sources.list文件将bookwrom的软件源放入该文件2:执行dockerps-a得到要设置的容器id3:执行dockercpsources.list容器id:/etc/apt/将软件源list放入docker容器中3:容器中执行aptupdate成功......
  • 制作Docker镜像
    目录一、Docker构建镜像的原理1、镜像分层原理2、Docker的镜像结构3、分层存储原理4、构建命令与层的关系5、最终镜像的创建二、dockercommit构建镜像1、使用场景2、手动制作yum版的nginx镜像2.1、启动一个centos容器,安装好常用的软件以及nginx2.2、关闭nginx后台运行2.3、自定......
  • DockerDesktop中启动jenkins容器时提示:Can not write to /var/jenkins_home/copy_ref
    场景Windows10(家庭版)中DockerDesktop(docker)的配置、安装、修改镜像源、使用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/139264096按照以上教程搭建之后想要运行jenkins容器,所以执行如下指令dockerrun-d--namejenkins-p18088:8080-v/jenkinshome:......
  • 旅行第三天【算法】双指针-----盛最多水的容器
    文章目录一、题目二、算法原理三、编写代码一、题目链接:盛最多水的容器二、算法原理首先,这种题可以用暴力解法(枚举每一种容器的大小情况),但是显然会超时(不用尝试啦,我已经试过啦!)其次还是咱们的主题----->利用双指针来求解下面先附上草稿图容器面积=高度(左......