Docker 容器相关命令

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

查看最后一次运行的容器

docker ps -l

查看停止的容器

docker ps -f status=exited

删除容器(正在运行容器不能删除)

docker rm 容器名称/NAMES

交互式容器(创建命令)

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

守互式容器(创建命令)

docker run -di --name=容器名称 镜像名称:标签 /bin/bash

示例装mysql

 docker run -di --name=mysql5 -p 3307:3306 -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
  • -d:后台运行容器,保证在退出终端后容器继续运行
  • -v   把mysql的数据在宿主机内显示,做数据备份

 示例装mssql

docker run -di -v mssql2019:/var/opt/mssql  -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=abcABC123" -p 1434:1433 --name=sql2019 -h sql2019 -d mcr.microsoft.com/mssql/server:latest

 

在 Linux Docker 容器中还原 SQL Server 数据库

a)注意 sql server 镜像 目前只有2017,2019 所以与本地数据库有些不兼容的。

b)将备份文件复制到容器中 .bak文件   

sudo docker exec -it sql1 mkdir /var/opt/mssql/backup

sudo docker cp wwi.bak sql1:/var/opt/mssql/backup

c)还原数据库

连接到sql server

sudo docker exec -it sql1 "bash"

在容器内部使用 sqlcmd 进行本地连接。

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"

在容器中运行 sqlcmd,列出备份中的逻辑文件名和路径。 这是通过“RESTORE FILELISTONLY”Transact-SQL 语句实现的。

RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/wwi.bak"

调用 RESTORE DATABASE 命令,还原容器中的数据库。 为上一步中的每个文件指定新路径。

RESTORE DATABASE WideWorldImporters FROM DISK = "/var/opt/mssql/backup/wwi.bak" WITH MOVE "WWI_Primary" TO "/var/opt/mssql/data/WideWorldImporters.mdf", MOVE "WWI_UserData" TO "/var/opt/mssql/data/WideWorldImporters_userdata.ndf", MOVE "WWI_Log" TO "/var/opt/mssql/data/WideWorldImporters.ldf", MOVE "WWI_InMemory_Data_1" TO "/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1"

d)出现 RESTORE DATABASE successfully processed 58455 pages in 18.069 seconds (25.273 MB/sec).

说明成功。

注意 2019数据库 的名称不能有点(.),不然会报语法错误

 https://docs.microsoft.com/zh-cn/sql/linux/tutorial-restore-backup-in-sql-server-container?view=sql-server-ver15

   示例 安装nginx

 docker run -di -p 8016:80 --name=nginx1 -v /opt/nginx/html:/usr/share/nginx/html:rw  -v /opt/nginx/logs:/var/log/nginx --privileged -d nginx:latest

还要复制配置文件

登录容器

docker exec -it 容器名称(或容器ID)  /bin/bash

退出当前容器(并关闭)

exit

启动容器

docker start 容器名称

停止容器

docker stop 容器名称(或容器ID)

拷贝文件或目录

拷贝到容器里

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

查看容器IP地址

docker inspect 容器名称(容器ID)

也可以直接执行下面命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)

宿主机目录与容器目录共享

创建启动容器时,使用 -v参数设置共享目录

如何宿主机目录不存在会自动创建,可以挂载多个共享目录  使用多个 -v

docker run -di --name=容器名称 -v  宿主机绝对目录(/root/host_data):容器内目录(/root/c1_data)  镜像:tag  /bin/bash

docker Access to the path '/proc/1/map_files' is denied.

问题原因及解决办法

原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:

  • 1.在运行容器的时候,给容器加特权,及加上 --privileged=true 参数:

docker run -i -t -v /soft:/soft --privileged=true 686672a1d0cc /bin/bash

  • 2.临时关闭selinux:

setenforce 0

  • 3.添加selinux规则,改变要挂载的目录的安全性文本
原文地址:https://www.cnblogs.com/qingjiawen/p/15005742.html