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

 

 查看日志

docker logs 容器id/名称

 

/dev/mapper/centos-root目录100%的问题

首先切换到/目录下,使用du -h -x --max-depth=1 命令查询大文件目录,进入具体的目录中进行操作

 

 

Docker overlay2占用大量磁盘空间解决办法

首先找到overlay2目录

cd /var/lib/docker/overlay2

 

查看占用空间的pid,以及对应的容器名称

docker ps -q | xargs docker inspect --format '{{.State.Pid}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep "6b6572a745dccd415280c6b4eacdfb531c61c5f3618be64dc6e20f00b72d6951"

 

 

删除文件或文件夹

ls a*  查看以a开头的文件
rm -rf a*    //删除以a开头的所有文件

 

示例装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

sqlserver镜像

https://learn.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash

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

 

Ubuntu的防火墙开放1433端口。因为上面的docker命令我们用了1433端口。

sudo ufw allow 1433

 

重启防火墙。重启防火墙之后就生效了。

sudo ufw reload

 

禁用防火墙

sudo ufw disable

开启防火墙

sudo ufw enable

 

 

 

 

 

在 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)

 

查看容器完整ID

docker inspect --format="{{.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规则,改变要挂载的目录的安全性文本
posted @ 2021-07-13 11:42  qingjiawen  阅读(171)  评论(0编辑  收藏  举报