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介绍及其常用命令

1.为什么要用到docker?

在我们实际业务中,原生技术的微服务的部署十分麻烦,例如我们安装redis,Ubuntu和Centos的命令也有差异,安装MySQL,不同操作系统和环境底层的函数库和依赖可能会有差异,导致实际部署时问题千奇百怪,由此docker就是来解决这样的问题的

docker可以把各个组件所依赖的函数库等一并打包为镜像,方便各个组件和微服务的部署

2.安装docker

2.1卸载旧版本

如果安装过旧版本的docker,用列命令修改:

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2.2安装docker

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

更新本地镜像源

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

输入命令安装docker-ce社区免费版本

yum install -y docker-ce

2.3启动docker

docker在使用时需要配置到多个端口,如果你项目在开发阶段,不是部署到服务器,而是本机,那么我建议你关闭防火墙,如果你需要发布到云服务器上,那么一定要记住你用到的端口,开放你需要的端口,否则无法访问

关闭防火墙:

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

命令启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

查看版本:

docker -v

2.4配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors.

2.4.1 安装/升级Docker客户端

推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce

2.4.2 配置镜像加速器

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://iu4pcpiy.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.Centos7安装DockerCompose

DockerCompose可以帮助我们快速部署分布式应用,无需一个个微服务去构建镜像和部署。

3.1下载

Linux可通过命令下载:

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

3.2修改文件权限

# 修改权限
chmod +x /usr/local/bin/docker-compose

4.Docker镜像仓库

众所周知,dockerHub也是一个镜像仓库,但是如果我们公司或者团队内,不可能把自己制作的镜像上传到公共的平台吧?所以,我们需要一个私有仓库,如何搭建一个私有仓库,这节就教大家

4.1基础仓库

输入如下命令:

docker run -d \
    --restart=always \
    --name registry	\
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry

命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。

访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像

4.2图形化界面仓库

输入命令:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=(你想要的仓库名字)
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

4.3配置信任地址

我们的私服采用的是http协议,默认不被Docker信任,所以需要做一个配置,客户端上传(push)时,如果不配置信任,就会被拦截,所以我们需要做一些修改

# 打开要修改的文件
vi /etc/docker/daemon.json

然后在原有的字段后,根据json语法,加个逗号和回车,输入:

# 添加内容:
"insecure-registries":["http://xxx.xxx.xxx.xxx(上传被信任的客户机ip或者域名):8080"]

重新加载:

# 重加载
systemctl daemon-reload

重启docker

# 重启docker
systemctl restart docker

5.docker常用命令

5.1镜像操作

5.1.1拉取镜像

去镜像仓库(DockerHub)拉取一个nginx,如果nginx后不加版本号默认最新的。

docker pull nginx	#nginx就是拉取的镜像名称

5.1.2查看镜像

docker imgages

5.1.3保存镜像

有时候我们想通过物理介质拷贝给队友,需要将镜像拷贝一份,我们可以保存为一个tar.gz文件

docker save -o [保存的目标文件夹名字] [镜像名称]

5.1.4删除镜像

docker rmi [镜像名称]

5.1.5导入加载镜像

我们导入别人的tar.gz镜像文件,命令如下

docker load -i [tar镜像打包文件]

5.2容器操作

镜像可以创建一个容器

5.2.1创建并运行容器

例如:创建并运行nginx容器的命令:

docker run --name [containerName(容器名)] -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • –name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

5.2.2进入容器,修改文件

docker exec -it [容器名] bash

命令解读:

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

5.2.3查看容器日志

正常看日志:

docker logs

如果要持续追踪日志,查看日志变化需要加入 -f 参数

5.2.4查看容器状态

查看正在运行的容器

docker ps

查看所有的容器

docker ps -a 

5.2.5暂停,停止,重启,删除一个容器

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

5.3数据卷操作命令

5.3.1创建和查看数据卷

docker volume create [创建名字]

5.3.2查看所有数据

docker volume ls

5.3.3查看数据卷详细信息

docker volume inspect [数据卷名字]

得到如下数据

{
    "CreatedAt": "2021-11-21T19:19:15+08:00",
    "Driver": "local",
    "Labels": {},
    "Mountpoint": "/var/lib/docker/volumes/html/_data",
    "Name": "html",
    "Options": {},
    "Scope": "local"
}

name就是数据卷名字,Mountpoint就是关联的宿主机目录

5.3.4删除数据卷

删除指定数据卷

docker volume rm [数据卷名字]

删除所有未使用的数据卷

docker volume prune

5.3.5挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

这里的-v就是挂载数据卷的命令:

-v html:/root/html:把html数据卷挂载到容器内的/root/html这个目录中

例如我们想修改容器中的文件,我们可以创建一个卷,挂载到容器中,这样我们就可以使用真实操作系统中的高级编辑工具编辑文件了

6.Dockerfile语法

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

而描述上述信息的文件就是Dockerfile文件。

Dockerfile文件其实就是一个个命令的集合,可以理解为shell脚本文件,按顺序执行命令

详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

目录如下:

请添加图片描述

  1. 实例代码如下:1.
# 指定基础镜像,可以理解为拿到ubuntu的底层函数和依赖等
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录,配置镜像中的java环境变量
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包,第一行代表将当前目录的jdk8.tar.gz拷贝到镜像中的/usr/local下
# $JAVA_DIR就是上面配置的环境变量,$是取环境变量的意思
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK,先cd进工作目录,再解压,移动
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
  1. 进入Dockerfile所在目录
  2. 运行命令
docker build -t javaweb(容器自定义的名字):1.0 (容器自定义的版本)
  1. 访问docker-demo项目,本项目是个springboot项目,所以访问时可以通过如下地址

http://xxx.xxx.xxx.xxx:8090/hello/count

有一个更加简便的方法,基于java:8-alpine镜像,配置jdk等繁琐的步骤都可以省略,可以快速将java项目做为镜像

上述实例代码就可改成这样

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
EXPOSE 8090
ENTRYPOINT java -jar /tmp/app.jar

7.Docker-Compose

7.1示例

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

例如我有如下的项目需要发布:

请添加图片描述

gateway文件夹(其他文件类似):

请添加图片描述

services:
 #service下二级目录,代表有名叫:nacos,mysql,userservice,orderservice,gateway五个容器需要部署
  nacos:
  # 去拉取nacos/nacos-server的镜像
    image: nacos/nacos-server
  # 单例启动
    environment:
      MODE: standalone
  # 端口匹配为8848
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
  # 数据库密码为123
    environment:
      MYSQL_ROOT_PASSWORD: 123
  # 挂载目录是($PWD代表当前路径)宿主机的$PWD/mysql/data挂载到镜像中的/var/lib/mysql目录中
  # 我们为什么知道要挂载到/var/lib/mysql中,请参照DockerHub的配置信息!!
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
  # 默认构建当前路径下的user-service中的Dockerfile文件
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"

DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

7.2部署

进入Docker-Compose所在的目录,然后运行下面的命令:

docker-compose up -d

8.Docker镜像仓库

推送镜像到私有镜像服务必须先tag,以nginx为例,步骤如下:

① 重新tag本地镜像,名称前缀为私有仓库的地址:xxx.xxx.xxx.xxx:8080/

docker tag nginx:latest xxx.xxx.xxx.xxx:8080/nginx:1.0 

② 推送镜像

docker push xxx.xxx.xxx.xxx:8080/nginx:1.0 

③ 拉取镜像

docker pull xxx.xxx.xxx.xxx:8080/nginx:1.0 
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 08:22:22  更:2021-11-24 08:23:45 
 
开发: 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/16 0:30:15-

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