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镜像
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数据库 的名称不能有点(.),不然会报语法错误
示例 安装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规则,改变要挂载的目录的安全性文本