前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统信服务器操作系统【docker 介绍及部署安装】

统信服务器操作系统【docker 介绍及部署安装】

作者头像
Kevin song
发布2024-05-11 17:03:17
2230
发布2024-05-11 17:03:17
举报

Docker是一个基于go语言开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何支持Docker的Linux或Windows操作系统上。Docker基于内核的轻量级虚拟化技术,使用沙箱机制,容器之间相互隔离。通过容器来打包应用、解耦应用和运行平台Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。

物理机 虚拟机 容器对比

容器化和虚拟化解决的方面和业务场景是不同的,所以两种技术并驾齐驱,相辅相成。虚拟化是硬件层面的隔离,而容器化是APP级别的隔离。

  • 物理机时代:部署慢,成本高,资源浪费,难于扩展迁移。
  • 虚拟机时代:多部署,易扩展,可以对硬件进行隔离给不同的虚拟机使用,但是虚拟机还是需要安装OS,如果只要部署小应用,比如一个mysql,也需要安装一个操作系统,重量大。
  • 容器化时代:容器也需要OS,但是十分微小,自动化部署,集群管理。

云产品结合虚拟化和容器化技术

Docker 容器、镜像工作流

客户端client发送命令,docker daemon(docker守护进程)收到请求,执行操作,比如拉取操作镜像就会从仓库register拉取,拉取到本地镜像image中,从而生成容器镜像 image 是docker中的模板,根据模板构造容器,一个镜像可以创建多个容器。

Docker公司运营的公共仓库叫做 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供用户下载,国内的公有仓库包括阿里云 、网易云等。

国内公共镜像仓库

  • Docker 官方中国区: https://registry.docker-cn.com
  • 网易: http://hub-mirror.c.163.com
  • 中科大: https://docker.mirrors.ustc.edu.cn

Docker 三大核心

镜像(Image)

镜像是Docker运行容器的前提。Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。一个镜像可以包含一个基本的操作系统环境。

容器(Containesr)

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行的一个实例。可以将其创建、启动、开始、停止、删除,而这些容器都是彼此互相隔离、互不可见的。可以把容器看作是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

仓库(Repository)

Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。

操作系统版本信息

代码语言:javascript
复制
[root@localhost ~]# cat   /etc/os-version 
[Version] 
SystemName=UOS Server
SystemName[zh_CN]=统信服务器操作系统
ProductType=Server
ProductType[zh_CN]=服务器
EditionName=e
EditionName[zh_CN]=e
MajorVersion=20
MinorVersion=1060
OsBuild=12038.101.100

dnf安装docker

代码语言:javascript
复制
dnf  install  docker

系统软件包部署docker 版本为18.09

启动服务

代码语言:javascript
复制
systemctl enable docker
systemctl start docker

配置国内镜像仓加速器

vim /etc/docker/daemon.json

代码语言:javascript
复制
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}

重启docker

代码语言:javascript
复制
systemctl daemon-reload
systemctl restart docker

Docker 二进制包官方下载链接

x86 架构

https://download.docker.com/linux/static/stable/x86_64/

aarch 架构

https://download.docker.com/linux/static/stable/aarch64/

二进制部署docker

1、下载 docker二进制包文件

代码语言:javascript
复制
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz

2、解压docker压缩包

代码语言:javascript
复制
tar -zxvf docker-20.10.9.tgz

3、移动二进制文件到/usr/local/目录

代码语言:javascript
复制
mv docker /usr/local/

4、设置环境变量

代码语言:javascript
复制
docker程序环境变量
echo "export PATH=\$PATH:/usr/local/docker" >>/etc/profile 
重载环境变量
source /etc/profile

5、创建docker用户和组

代码语言:javascript
复制
groupadd  docker
useradd -s /sbin/nologin -M -g docker docker

6、 systemd 管理docker.service服务

vim /usr/lib/systemd/system/docker.service

代码语言:javascript
复制
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
#docker 执行程序未放在/usr/bin目录下,需指定环境变量/usr/local/docker
Environment="PATH=/usr/local/docker:/usr/bin:/usr/sbin"
Type=notify
ExecStart=/usr/local/docker/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

注意:docker 执行程序未放在/usr/bin目录需指定环境变量/usr/local/docker。

代码语言:javascript
复制
Environment="PATH=/usr/local/docker:/usr/bin:/usr/sbin"

7、配置国内的公有仓库

创建docker 目录

代码语言:javascript
复制
mdkir -p  /etc/docker

编辑daemon.json

vi /etc/docker/daemon.json

代码语言:javascript
复制
{
"registry-mirrors": [
 "https://docker.mirrors.ustc.edu.cn",
 "https://registry.docker-cn.com",
 "https://hub-mirror.c.163.com"
 ]
}

8、启动docker

代码语言:javascript
复制
systemctl start docker && systemctl enable docker

9、查看docker 版本

代码语言:javascript
复制
docker -v

Docker运行MySQL容器

拉取mysql镜像

指定版本

代码语言:javascript
复制
docker pull mysql:8.0.30

拉取最新的mysql

代码语言:javascript
复制
docker pull mysql:latest

查看images镜像

代码语言:javascript
复制
docker images

启动容器并拷贝配置文件

代码语言:javascript
复制
docker run -itd -p 3306:3306 --name mysql-server --privileged=true -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai mysql:8.0.30

docker run 参数介绍

docker run [OPTIONS] 镜像名:标签名

-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用 。

-t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name 为创建的容器指定一个名称 。

-d 创建一个守护式容器在后台运行,并返回容器ID;

-v 表示目录映射, 格式为:-v 宿主机目录:容器目录

注意:最好做目录映射,在宿主机上做修改,然后共享到容器上

-p 端口映射,格式为:-p 宿主机端口:容器端口

-it 运行容器并进入该容器的终端

-id 后台运行容器

--privileged=true 映射多级目录,防止出现没有权限

--restart=always 容器随docker服务启动

访问容器

代码语言:javascript
复制
docker exec -it mysql-server /bin/bash

复制配置文件

代码语言:javascript
复制
docker cp mysql-server:/etc/my.cnf /docker/mysql/conf/my.cnf

删除启动的容器

代码语言:javascript
复制
docker rm -f  mysql-server

创建数据持久化的文件夹

代码语言:javascript
复制
mkdir -p /docker/mysql/conf
mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/logs

启动MySQL容器并数据持久化

代码语言:javascript
复制
docker run -itd --name mysql-server --privileged=true -p 3306:3306 \
-v /docker/mysql/conf/my.cnf:/etc/my.cnf \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD="password" -e TZ=Asia/Shanghai   -d mysql:8.0.30 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

docker 运行参数介绍

提升root权限

--privileged=true

远程连接端口

-p 3306::3306

将配置文件挂载到容器中的配置文件

-v /docker/mysql/conf/my.cnf:/etc/my.cnf

将数据文件夹挂载到容器中存放数据的文件夹

-v /docker/mysql/data:/var/lib/mysql

挂载日志

-v /docker/mysql/logs:/logs

设置时区

-e TZ=Asia/Shanghai

限制内存大小

--memory=4G或4096M

限制CPU

--cpus=2

访问容器

代码语言:javascript
复制
docker exec -it --user root   mysql-server  /bin/bash

宿主机对容器执行命令

代码语言:javascript
复制
docker exec mysql-server  /bin/bash -c 'pwd'

Docker 常用命令

查看docker 版本信息

docker version

查看docker 信息

docker info

镜像管理

拉取镜像

docker pull 镜像名

docker pull 镜像名:tag

搜索镜像

docker search 镜像名

删除镜像

docker rmi 镜像ID/镜像名

容器运行信息

查看容器状态

docker ps -a

更换容器名

docker rename 容器ID/容器名 新容器名

查看docker工作目录

sudo docker info | grep "Docker Root Dir"

查看docker磁盘占用总体情况

du -hs /var/lib/docker/

查看Docker的磁盘使用具体情况

docker system df

查看容器的信息

docker inspect mysql-server

进入容器方式

docker exec -it 容器名/容器ID /bin/bash

容器启停管理

启动容器

docker start 容器ID/容器名

停止容器

docker stop 容器ID/容器名

kill 容器

docker kill 容器ID/容器名

重启容器

docker restart 容器ID/容器名

删除容器

删除一个容器

docker rm -f 容器名/容器ID

删除多个容器 空格隔开要删除的容器名或容器ID

docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID

删除全部容器

docker rm -f $(docker ps -aq)

查看容器日志

docker logs -f --tail=要查看末尾多少行 默认all 容器ID

docker logs -f --tail=10 mysql-server

保存镜像

将镜像保存为tar 压缩文件,在任何一台安装docker的服务器上加载镜像

命令:

docker save 镜像名/镜像ID -o 镜像存储路径

docker save mysql-server -o /opt/ mysql-server.tar

加载镜像

加载镜像保存文件,使其恢复为一个镜像

docker load -i 镜像保存文件位置

查看镜像

docker images -a

容器生命周期运维流程

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源搬运工宋师傅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档