Docker系列-超级详细教你Linux安装并使用docker compose,如何使用docker-compose安装sqlserver

docker compose是什么?

Docker Compose 和docker功能一样,为了运行容器服务,但是docker compose比docker更好的一点是:允许你在一个 YAML 文件中定义多个容器及其配置,并通过一条命令启动和管理这些容器。

为什么要使用docker compose?

通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务,然后一个命令来创建并启动所有服务。非常方便使用,类似devops K8S里的yaml文件用法.

安装独立的 docker compose

  • 可以同时参考官方文档:
  • docker compose 有不同版本, standalone和其他版本语法略有不同。
  • 请注意,Compose standalone使用-compose语法,而不是当前的标准语法Compose。 例如,使用Compose standalone时键入docker-compose up,而不是docker compose up。

执行命令,下载docker-compose的可执行环境:

bash 复制代码
curl -SL https://github.com/docker/compose/releases/download/v2.29.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

配置环境

目录调整
  • 将下载好的文件转移到/usr/local/bin目录,同时修改一下它的名字
  • 假如下载好的文件名为docker-compose-linux-x86_64
bash 复制代码
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
配置权限
  • 给/usr/local/bin/docker-compose路径的文件可执行权限
bash 复制代码
chmod +x docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

使用docker-compose测试安装是否成功

测试方案一:

正常情况下执行下面命令即可知道当前安装版本,如果你安装的是其他版本,可以去掉中间-试一下~

css 复制代码
docker-compose --version
测试方案二:

使用Compose standalone时键入docker-compose up,而不是docker compose up,如果你已经安装了其他版本的docker compose, 你可以执行 docker compose进行测试

docker-compose
测试示例
vbnet 复制代码
USER_01@xiaojinServer:~$ docker compose

Usage:  docker compose [OPTIONS] COMMAND

Define and run multi-container applications with Docker

Options:
      --all-resources              Include all resources, even those not used by services
      --ansi string                Control when to print ANSI control characters ("never"|"always"|"auto") (default "auto")
      --compatibility              Run compose in backward compatibility mode
      --dry-run                    Execute command in dry run mode
      --env-file stringArray       Specify an alternate environment file
  -f, --file stringArray           Compose configuration files
      --parallel int               Control max parallelism, -1 for unlimited (default -1)
      --profile stringArray        Specify a profile to enable
      --progress string            Set type of progress output (auto, tty, plain, json, quiet) (default "auto")
      --project-directory string   Specify an alternate working directory
                                   (default: the path of the, first specified, Compose file)
  -p, --project-name string        Project name

Commands:
  attach      Attach local standard input, output, and error streams to a service's running container
  build       Build or rebuild services
  config      Parse, resolve and render compose file in canonical format
  cp          Copy files/folders between a service container and the local filesystem
  create      Creates containers for a service
  down        Stop and remove containers, networks
  events      Receive real time events from containers
  exec        Execute a command in a running container
  images      List images used by the created containers
  kill        Force stop service containers
  logs        View output from containers
  ls          List running compose projects
  pause       Pause services
  port        Print the public port for a port binding
  ps          List containers
  pull        Pull service images
  push        Push service images
  restart     Restart service containers
  rm          Removes stopped service containers
  run         Run a one-off command on a service
  scale       Scale services
  start       Start services
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop services
  top         Display the running processes
  unpause     Unpause services
  up          Create and start containers
  version     Show the Docker Compose version information
  wait        Block until the first service container stops
  watch       Watch build context for service and rebuild/refresh containers when files are updated

Run 'docker compose COMMAND --help' for more information on a command.

安装失败解决方案

如果docker-compose安装失败,检查下你的路径权限。可以尝试执行下面命令:

bash 复制代码
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
命令解析
  • 这条命令的作用是在 /usr/bin 目录下创建一个指向 /usr/local/bin/docker-compose 的符号链接。
  • 假设 /usr/local/bin/docker-compose 已经存在,并且是一个可执行文件。执行上述命令后,你可以直接在终端输入 docker-compose 而不需要指定完整路径。
  • 执行 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 后,会在 /usr/bin 目录下创建一个名为 docker-compose 的文件,这个文件实际上是一个指向 /usr/local/bin/docker-compose 的符号链接。 这样做可以让 docker-compose 命令在系统路径中变得可访问,从而方便使用。
逐条具体分析:
  • sudo: 以超级用户权限执行命令。
  • ln: 创建链接的命令。
  • -s: 表示创建符号链接(symbolic link)。
  • /usr/local/bin/docker-compose: 源文件的路径。
  • /usr/bin/docker-compose: 符号链接的目标路径。
作用:
  • 简化路径: 使得用户可以在任何目录下直接运行 docker-compose 命令,而不需要指定完整的路径。
  • 全局可访问: 将 docker-compose 命令添加到全局路径中,使得所有用户都可以使用这个命令。

使用docker-compose安装sqlserver

搜索镜像
sql 复制代码
docker search mssql-server
拉取镜像

找到适合你的版本,拉取镜像,下面这个是我从官方文档里直接找到的镜像哇~

bash 复制代码
docker pull mcr.microsoft.com/mssql/server:2022-latest
运行容器,创建数据库
  • 密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。
  • 假设你的密码为xiaojinlalala.123
创建服务文件

创建一个docker-compose.yml文件并定义SQL Server服务

yaml 复制代码
version: '3.3'
services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: mssql-server
    restart: always
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=tangdoudou.123
      - MSSQL_SA_PASSWORD=tangdoudou.123
    ports:
      - 5433:1433
    volumes:
      - ./sqlserver:/var/opt/mssql
安装执行
sudo docker compose up
安装成功

执行结果:

ruby 复制代码
USER_01@xiaojinServer:/docker-compose$ sudo docker compose up -d
WARN[0000] /docker-compose/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
 ✔ Container mssql-server  Started                                                                                                                                                                        0.4s
USER_01@xiaojinServer:/docker-compose$

查看容器列表

css 复制代码
docker ps -a
状态解释
  • 如果 STATUS 列显示 Up 状态,则 SQL Server 正在容器中运行,并且在侦听 PORTS 列中指定的端口。
  • 如果 SQL Server 容器的 STATUS 列显示 Exited,请参阅 SQL Server Docker 容器故障排除
  • 一旦 SQL Server 错误日志显示消息(SQL Server is now ready for client connections. This is an informational message; no user action is required。 )就可连接此服务器。

查看容器内的 SQL Server 错误日志:

bash 复制代码
docker exec -t sqlserver01 cat /var/opt/mssql/log/errorlog | grep connection

连接数据库

方案一:使用可视化工具连接

下载DBever,连接数据库

方案一实际案例:

连接案例:

方案二:在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server

一般情况下,我们会使用可视化工具去连接数据库,如果你需要命令行方式连接的话,可以参考这个文档:在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server

方案二实际案例:
进入容器:
bash 复制代码
docker exec -it sqlserver01 "bash"
登录数据库,如果遇到certificate verify failed:self-signed certificate报错请参考下面的报错解决01。
bash 复制代码
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123"
查询已经存在的数据库、查询数据库版本
vbnet 复制代码
SELECT name AS DatabaseName FROM sys.databases;
go

查询示例:

sql 复制代码
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
1> SELECT name AS DatabaseName FROM sys.databases;
2> go
DatabaseName
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb

(4 rows affected)
1> SELECT name AS DatabaseName FROM sys.databases;
2> fo
3> go
Msg 102, Level 15, State 1, Server d046613904c3, Line 2
Incorrect syntax near 'fo'.
1> select @@version
2> go
                                                                                                                                                                                                               
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
        Sep 19 2024 08:25:04
        Copyright (C) 2022 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>

(1 rows affected)
1>
报错解决01:

快速解决报错: SQL Server : SSL Provider: certificate verify failed:self-signed certificate

Sqlcmd: 复制代码
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
解决方案:
使用-No:

-N[s|m|o]的解释说明: Set the connection encryption mode to be Strict, Mandatory, or Optional respectively. Defaults to mandatory if not specified. ([s|m|o] added in sqlcmd 18.0)

bash 复制代码
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123" -No
实际案例:
sql 复制代码
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
1> SELECT name AS DatabaseName FROM sys.databases;
2> go
DatabaseName
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb

(4 rows affected)
1> SELECT name AS DatabaseName FROM sys.databases;
2> fo
3> go
Msg 102, Level 15, State 1, Server d046613904c3, Line 2
Incorrect syntax near 'fo'.
1> select @@version
2> go
                                                                                                                                                                                                               
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
        Sep 19 2024 08:25:04
        Copyright (C) 2022 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>

(1 rows affected)
1>

结语

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~

学无止境,合作共赢

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~
相关推荐
tangdou3690986552 小时前
手把手非常详细图文并茂教你 Docker 部署 SQL Server
docker·容器·sql server
福大大架构师每日一题13 小时前
20.1 分析pull模型在k8s中的应用,对比push模型
云原生·容器·kubernetes
飘逸高铁侠16 小时前
docker export/import 和 docker save/load 的区别
docker·容器·eureka
大宇进阶之路16 小时前
docker运行arm64架构的镜像、不同平台镜像构建
docker·微服务·架构
bestcxx18 小时前
(十八)、登陆 k8s 的 kubernetes-dashboard &更多可视化工具
云原生·容器·kubernetes
小胖胖吖18 小时前
【CKA】二、节点管理-设置节点不可用
云原生·容器·kubernetes·cka
福大大架构师每日一题18 小时前
22.2 k8s中ksm采集的使用的dns解析
云原生·容器·kubernetes
weixin_4539650019 小时前
[k8s理论知识]1.runc容器管理工具
云原生·容器·kubernetes
长天一色19 小时前
【Docker从入门到进阶】04.高效实践
运维·docker·容器