IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker必知必会 -> 正文阅读

[系统运维]Docker必知必会

一、安装docker

这里介绍在centos7系统上的docker安装,linux中不同系统不同版本安装docker都会有些差异。
具体步骤见后面链接:centos7中docker的安装

二、镜像的所有操作

这里介绍镜像操作的增删改查,这是docker中比较频繁的操作之一。做这些操作之前请正常安装完成docker并启动。使用docker version可查看是否正常启动了docker。

1.增加镜像(拉取镜像 )

docker image pull nginx:tag	
# *****************************************实战分割线*****************************************
#举例子:拉取nginx的最新版本镜像
docker image pull nginx:latest 
docker pull nginx:latest	

docker image pull 命令主体,其中image是可以省略的,在整个命令中nginx是镜像的名称,tag是版本号,他们使用冒号隔开。如果不显示指定tag时,则默认拉取最新版本也就是latest版本。

2.删除镜像

docker rmi 镜像:tag
docker image rm 容器名/容器id
# *****************************************实战分割线*****************************************
#举例子:删除tag为latest的nginx的镜像
docker rmi nginx:latest
#举例子:删除id为612开头的镜像(通过612能确认唯一id)
docker image rm 612
#举例子:强制删除id为612开头的镜像(即使镜像在使用也会删除)
docker image rm -f 612

这两个删除命令等价,都可以用来删除镜像,他们没有任何区别。只有使用容器名和id来做删除时会有区别。使用镜像名删除时只会删除当前镜像,不会删除与该镜像名同源的镜像,但是同源镜像的id都是相同的,所以若是使用id删除就会删除所有同源镜像。上面的示例中-f是强制的意思。这与linux的命令基本都是一致的。一般删除时还是建议使用镜像名来删除,若是使用id很可能会同时删除了多个镜像。

3.修改镜像

docker tag nginx:latest mynginx:3.3.3	
# *****************************************实战分割线*****************************************
#举例子:将latest版本的nginx更名为3.3.3版本的mynginx,更改后原先的镜像会依然存在
docker tag nginx:latest mynginx:3.3.3	
#举例子:使用该命令可以查看所有的镜像
docker images 

为本地镜像添加新的标签,本地镜像只能改镜像名称和标签,其他改不了。修改以后会出现一个新的镜像,这个镜像和原先的镜像其实都是一个镜像的不同名称而已。他们本质上还是一个。这就像java中一个对象有多个引用一样,也可以类比spring中为bean起的别名,其实他们指向的都是一个镜像。

4.查询镜像

docker images # 查询本地所有的镜像
docker image ls # 查询本地所有的镜像
docker image inspect nginx:latest # 查看本地tag为latest的nginx镜像的所有信息
docker inspect nginx:latest	# 查看本地tag为latest的nginx镜像的所有信息
docker search nginx
# 举例子:查询标星在200以上的nginx
docker search -f=stars=200
docker search --filter=stars=200 nginx 

上面介绍了三个命令,分别是查看本地所有镜像的命令images、查看本地镜像详细信息的命令inspect、查看远端所有镜像的命令。使用的话也就是上面介绍的那样了。

三、容器的所有操作

这一章节介绍关于容器的所有操作,当然这里的操作介绍的并不是非常全,但是作为基础使用基本够了。

1.增加容器

docker create -it centos:centos8 # 创建一个tag为centos8的centos容器
docker run -it centos:centos8 /bin/bash
# *****************************************实战分割线*****************************************
docker create -it centos:centos8 
docker start 容器名/id
docker run -it -d centos:centos8 /bin/bash
docker ps -a # 查看本地的所有容器
docker ps # 查看所有运行中的容器

docker create和docker run命令需要说明的是,本地若是不存在该镜像,会先去远端拉取该镜像然后才会创建容器。docker run命令相当于docker create + docker start。所以说docker run是创建并启动。需要注意的是五路哪种方式创建的容器只要使用exit退出容器后,容器就会停止。
-it选项让 Docker 分配一个伪终端并绑定到容器的标准输入上,则让容器的标准输入保持打开。但是如果不连接这个终端是看不出效果的。
-d 让容器以守护进程的方式运行。容器以什么状态运行都是在创建容器时指定的,容器一旦创建完成则不能更改,若是想更改容器的运行方式只能是删除容器然后重新建立。
/bin/bash 创建容器的同时,打开一个bash终端。

2.删除容器

docker pause 容器名/id,#暂停容器,不会删除容器,应该还可以重新启动。
docker unpause 容器名/id, #取消暂停,此时容器会恢复运行状态。
docker stop 容器名/id #暂停容器的运行
docker kill 容器名/id  #这是直接杀死容器
docker container prune #删除所有不在运行状态的容器。
# docker rmi (删镜像)、docker image rm(删除镜像),这俩命令与下面命令不一样需注意。
docker rm -f 容器名/id #强制删除容器,正在运行也会删除。

此命令区别与
容器的删除与镜像没有关系,事实上容器是在只读镜像的基础上增加了一些操作数据而已。这也就是常说的镜像和容器的结构是分层的。
需要注意的是docker stop命令会经过两个阶段,该命令会首先向容器发送 SIGTERM 信号,等待一段超时时间后(默认为 10 秒),再发送SIGKILL 信号来终止容器,所以stop命令并不会立即停止容器,但是docker kill 命令则会立即杀死容器。

3.修改容器

严格意义上来说容器是不可以修改的,这里所指的修改是进入到容器内部,可以对容器内部进行一些操作。我们可以将容器看成虚拟机里装了某个镜像然后构成了容器。我们可以进入到这个容器然后然后修改这个虚拟机的配置项。这里就介绍到如何进入到容器内部。

docker attach 容器名/id
docker exec -it 容器名/id /bin/bash
#举例子:使用attach命令通过redis容器id进入到容器内部
docker attach 3b93 # 3b93是redis容器的id
#举例子:使用exec命令进入到redis容器的内部
docker exec -it 3b93 /bin/bash

注意进入容器后使用exit退出时,容器就会停止。默认退出方式是ctrl+p、ctrl+q(这里注意这两个都需要执行的,先执行ctrl+p再执行ctrl+q才可以正常退出容器 ),退出时不影响容器的正确运行。不过也可以指定退出的快捷键,没什么意义,使用默认就好。不过attach命令有个很明显的缺陷,就是所有连接 到容器的客户端都是同步显示的,也就是一个终端执行命令,所有都会看到,一个终端卡住了,所有终端也会卡
住,这样总感觉不对,好像是单线程同步操作,对于多个连接来说,自己的操作很容易被打断,所有又有了exec命令。这个命令是异步的,各个终端谁操作谁的,互不影响。可以看出是多线程应用。这里的-it与创建容器的-it都是一样 的作用就是创建一个伪终端然后保持打开,上面说只能在创建容器时使用-it是对于exec命令出来之前的docker来说的。并且exec -it id /bin/bash 是推荐的打开方式。默认退出方式都是一致的都是:ctrl+p、ctrl+q。

4.查看容器

docker ps -a # 查看所有容器,包含停止运行和正在运行的容器
docker ps # 查看正在运行的所有容器
docker container inspect 容器名/id  # 查看某容器的具体信息
docker top 容器名/id # 这里的top与linux系统的top命令类似
docker stats 容器名/id # 查看容器中内存、cpu等的使用情况
docker container port 容器名/id # 查看容器内的端口映射情况

这里第一、二个和最后一个可能会比较常用,第一、二个没啥需要多余声明的,最后一个命令使用时docker container port是命令,后面跟容器的id或者名称即可。

5.启动容器

docker start 容器名/id # 使用create命令创建的容器默认是关闭的,需要启动,还有容器一旦执行stop后也需要使用start启动。
docker restart 容器名/id # 重启运行中容器。
docker run -it 镜像:tag /bin/bash # 创建一个容器并运行他,并通过bash打开一个终端。

这三个是比较常用的命令,第一个是启动容器,第二个是重启,第三个是创建加启动,docker run相当于docker create 加 docker start命令的组合。

6.容器的状态:

  • Created : 创建后未运行过,使用create命令。
  • Up : 正在运行,使用run、start、unpause等命令
  • Up paused :被暂停,使用了pause命令
  • Exited :退出了,执行stop,或者bash中使用exit

四、docker使用常见问题

1.docker的登录

不登录其实并不影响我们从docker官网下载镜像,只是我们不登录便不能上传自己的镜像了,若是想要将自己的镜像上传到远端仓库则是需要登录的,登录页比较简单。

docker login # 然后根据提示输入用户名和密码即可。

2.配置阿里云镜像加速

详情请参考这篇文章:阿里云镜像加速

3.端口映射问题

# 下面是创建并打开mysql容器的典型命令,其中-p便是作端口映射使用的,-p后面冒号左面是宿主机端口,后面则是容器的占用端口。
docker run -d -e MYSQL_ROOT_PASSWORD=password --name=mymysql -p 3306:3306 mysql:5.7 

尤其需要注意宿主机端口是否放行了,若是不放行累死也是访问不到的,最开始可以先用telnet命令测试下端口是否可以正常访问,若是不支持telnet命令请看第5部分,telnet不通就可以查看防火墙了,请看第4部分。

4.防火墙放行端口问题

下面列出了防火墙的常用操作命令,以供参考。

sudo systemctl status firewalld # 查看防火墙是否运行,若是运行会显示running
sudo firewall-cmd --list-ports #查看端口有没有被防火墙放行,若是没有对应端口则说明未放行。
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent # 放行3306端口,然后一定要重启防火墙
sudo systemctl restart firewalld.service # 重启防火墙
sudo firewall-cmd --list-ports # 再次查看端口有没有放行成功,下面出现3306就表示成功了

# 部分参数解释
# –zone 用以标识该端口放行的范围
# --add-port=3306/tcp 标识端口与通讯协议
# --permanent 标识重启放行依然生效

5.容器不支持telnet命令

参考这位大佬的文章:linux下安装telnet命令

6.容器不支持ps命令

以下是ps的安装命令

apt-get update && apt-get install procps

7.容器不支持vim命令

以下是安装vim命令的命令

apt-get update
apt-get install vim
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:48:04  更:2021-10-13 11:48:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:45:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码