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的可执行环境:
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
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
配置权限
- 给/usr/local/bin/docker-compose路径的文件可执行权限
chmod +x docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
使用docker-compose测试安装是否成功
测试方案一:
正常情况下执行下面命令即可知道当前安装版本,如果你安装的是其他版本,可以去掉中间-试一下~
docker-compose --version
测试方案二:
使用Compose standalone时键入docker-compose up,而不是docker compose up,如果你已经安装了其他版本的docker compose, 你可以执行 docker compose进行测试
docker-compose
测试示例
USER_01@xiaojinServer:~$ docker composeUsage: docker compose [OPTIONS] COMMANDDefine and run multi-container applications with DockerOptions:--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 nameCommands:attach Attach local standard input, output, and error streams to a service's running containerbuild Build or rebuild servicesconfig Parse, resolve and render compose file in canonical formatcp Copy files/folders between a service container and the local filesystemcreate Creates containers for a servicedown Stop and remove containers, networksevents Receive real time events from containersexec Execute a command in a running containerimages List images used by the created containerskill Force stop service containerslogs View output from containersls List running compose projectspause Pause servicesport Print the public port for a port bindingps List containerspull Pull service imagespush Push service imagesrestart Restart service containersrm Removes stopped service containersrun Run a one-off command on a servicescale Scale servicesstart Start servicesstats Display a live stream of container(s) resource usage statisticsstop Stop servicestop Display the running processesunpause Unpause servicesup Create and start containersversion Show the Docker Compose version informationwait Block until the first service container stopswatch Watch build context for service and rebuild/refresh containers when files are updatedRun 'docker compose COMMAND --help' for more information on a command.
安装失败解决方案
如果docker-compose安装失败,检查下你的路径权限。可以尝试执行下面命令:
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
搜索镜像
docker search mssql-server
拉取镜像
找到适合你的版本,拉取镜像,下面这个是我从官方文档里直接找到的镜像哇~
docker pull mcr.microsoft.com/mssql/server:2022-latest
运行容器,创建数据库
- 密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。
- 假设你的密码为xiaojinlalala.123
创建服务文件
创建一个docker-compose.yml文件并定义SQL Server服务
version: '3.3'
services:sqlserver:image: mcr.microsoft.com/mssql/server:2022-latestcontainer_name: mssql-serverrestart: alwaysenvironment:- ACCEPT_EULA=Y- SA_PASSWORD=tangdoudou.123- MSSQL_SA_PASSWORD=tangdoudou.123ports:- 5433:1433volumes:- ./sqlserver:/var/opt/mssql
安装执行
sudo docker compose up
安装成功
执行结果:
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$
查看容器列表
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 错误日志:
docker exec -t sqlserver01 cat /var/opt/mssql/log/errorlog | grep connection
连接数据库
方案一:使用可视化工具连接
下载DBever,连接数据库
方案一实际案例:
连接案例:
方案二:在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server
一般情况下,我们会使用可视化工具去连接数据库,如果你需要命令行方式连接的话,可以参考这个文档:在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server
方案二实际案例:
进入容器:
docker exec -it sqlserver01 "bash"
登录数据库,如果遇到certificate verify failed:self-signed certificate报错请参考下面的报错解决01。
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123"
查询已经存在的数据库、查询数据库版本
SELECT name AS DatabaseName FROM sys.databases;
go
查询示例:
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:04Copyright (C) 2022 Microsoft CorporationDeveloper 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: 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.
解决方案:
- 方案一:下载安装一个证书点击参考这里
- 方案二:disable encryption with -No option[点击参考这里]((https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/connecting-with-sqlcmd)
使用-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)
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123" -No
实际案例:
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:04Copyright (C) 2022 Microsoft CorporationDeveloper Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>(1 rows affected)
1>
结语
- 今天就写到这里啦~
- 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
- 大家要天天开心哦
欢迎大家指出文章需要改正之处~
学无止境,合作共赢