docker常用命令记录

常用命令

查看命令帮助

有用!

docker --help

docker

启动docker

systemctl start docker

停止docker服务

systemctl stop docker

重启docker

systemctl restart docker

使用国内源

参考Docker 配置国内镜像源加速

切换路径,查看路径下是否存在daemon.json文件,不存在的话新建一个。

cd /etc/docker
touch daemon.json

使用vim打开daemon.json,输入i进入插入模式。

vi /etc/docker/daemon.json

添加内容如下。

{
  "registry-mirrors": [
    "https://xx4bwyg2.mirror.aliyuncs.com",
    "http://f1361db2.m.daocloud.io",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}{}

保存退出。

:wq

使配置生效

systemctl daemon-reload

重启Docker

systemctl restart docker

image

查看已安装的镜像

docker images

删除镜像

docker rmi image_id

container

创建容器

nvidia-docker表示创建的容器可以使用gpu(对于docker版本小于19的需要使用该格式),参考[ubuntu安装docker和nvidia-docker2];(https://blog.csdn.net/moutain9426/article/details/120252641)
-it表示交互式运行容器;
–name指定容器名;
–shm-size设置的是共享内存大小,根据需要设置,如果不设置的话,默认64M,训练深度学习模型的时候dataloader会报错提示共享内存不足;
-p是端口映射(主机端口:容器端口),如果需要使用ssh,容器端口必须设为22;
-v是地址映射(主机文件夹:容器文件夹,注意必须用绝对路径);
镜像的RESPOSITORY:TAG,使用docker images查看;
/bin/bash表示进入容器后启动bash

nvidia-docker run -it --name container_name --shm-size="15g" -p 8080:22 -v /home/ecust/txx/docker/container:/workspace  REPOSITORY:TAG /bin/bash

启动容器

docker start container_id

挂载容器(进入容器)

docker attach container_id

退出容器

exit

查看容器状态

docker stats container_name

查看容器ip

参考Docker查看容器ip及指定固定IP,其中container_name为容器名或容器id

sudo docker inspect container_name | grep IPAddress

修改容器的共享内存

查看容器信息

容器id为06b7be1cc029

docker ps -a

在这里插入图片描述
查找要修改容器的完整id

docker inspect 06b7be1cc029 |grep Id

在这里插入图片描述
进入/var/lib/docker/containers 目录下找到与 Id 相同的目录

这里可能会碰到权限不够无法cd的情况,需要切换到root权限进行操作

sudo su
cd /var/lib/docker/containers
cd 06b7be1cc029066af08e1dc6bc4a16e52a57cbc6a1065fd3c16a7ea4bd6ff943/

pytorch1.4为docker name,可通过docker ps -a查看

docker update pytorch1.4 --restart=always

停止docker

service docker stop

修改 hostconfig.json文件

“ShmSize”:67108864,根据需要改为30g(30* 1024* 1024* 1024),也就是32212254720,保存后退出。

gedit hostconfig.json

启动docker

systemctl start docker

再次进入容器可以发现共享内存shm已经变成30G了
在这里插入图片描述

修改容器的端口映射

修改

  • 参考前面修改容器的共享内存的方法打开hostconfig.json;
  • 找到"PortBindings":{“8080/tcp”:[{“HostIp”:"",“HostPort”:“8080”}]}进行修改,第一个8080是容器内部的ip,第二个8080是主机的ip,根据需求进行修改;

启动docker

systemctl start docker

pycharm使用docker环境

安装专业版pycharm,参考ubuntu常用软件安装

社区版好像不支持访问docker环境

方法一:连接docker镜像,pycharm运行代码时自动创建容器

将容器commit为image镜像

如果利用镜像创建容器之后,在容器中对环境进行了修改,想要使用pycharm调用容器中的环境,可以将该容器commit为镜像,以供pycharm调用;
-m后可以输入修改的说明信息,06b7be1cc029 为容器id,pytorch1.4:da_fasterrcnn_krumo是自己设定的镜像的pytorch1.4:da_fasterrcnn_krumo:tag

sudo docker commit -m "da_fasterrcnn_krumo_docker_pytorch1.4" 06b7be1cc029 pytorch1.4:da_fasterrcnn_krumo

查看生成的image

docker images

在这里插入图片描述
设置Pycharm

image name选择相应的image即可
python interpreter path选择相应路径下的python

在这里插入图片描述

PS:

  • 实践中发现,pycharm调用docker内的环境的方法是,根据配置的镜像,生成了一个辅助的容器,如下图。
    在这里插入图片描述
  • 因此需要把代码和数据放到生成的新容器中,才能正确运行,否则地址映射就有问题。

方法二(推荐):通过ssh连接已在运行中的docker容器

ssh一般用来服务器控制远程设备,pycharm使用ssh来访问容器,利用容器内的环境代码和数据来训练;
pycharm会把本地的代码和数据上传到docker容器映射的地址上,因此会需要有两份代码和数据,本地需要有一份代码数据,docker容器在本机的映射地址上也需要有一份代码和数据;

配置docker容器

参考pycharm如何连接远程服务器的docker容器进行运行和调试代码(一),需要在创建容器的时候将容器的端口设为22,或者创建完容器之后对端口映射进行修改。

进入容器

sudo docker start pytorch1.4
sudo docker attach pytorch1.4

修改容器密码

passwd

安装openssh-server和openssh-client

apt-get install openssh-server
apt-get install openssh-client

修改SSH配置文件

在最后添加一行
PermitRootLogin yes #允许root用户使用ssh登录

vim /etc/ssh/sshd_config

重启ssh服务

/etc/init.d/ssh restart

查看容器ip

apt install net-tools
ifconfig

容器ip为172.17.0.3

在这里插入图片描述

退出容器

exit

查看本机ip

参考ubuntu-查看本机的ip地址,同样用ifconfig查看本机ip为172.17.0.1

在这里插入图片描述

测试能否连接容器

172.17.0.3为容器的ip

ping 172.17.0.3

在这里插入图片描述

参考pycharm如何连接远程服务器的docker容器进行运行和调试代码(一),在本机上运行以下命令;
root:容器内部系统的root账号;
172.17.0.1:本机ip,前文使用ifconfig查看得到的docker0的ip;
-p 8080:本机的端口号;

ssh root@172.17.0.1 -p 8080

在这里插入图片描述

配置pycharm

configuration配置远程连接

使用pycharm专业版,在菜单中选择Tools-Deployment-Configuration,点击左上角的‘+’号,选择SFTP,设一个server name之后,进入如下页面

在这里插入图片描述
SSH configuration

点击SSH configuration后面的…,在弹出的界面进行配置:

  • HOST:容器ip;
  • Port:容器端口号;
  • User name:容器的root账号;
  • Local port:主机端口号;
  • Password:容器中设的密码;
    配置完之后,点击Test Connection测试连接,下图已经成功连接;

在这里插入图片描述
设置Root path

设置容器的root path,后面的在映射到容器的地址时,会以该路径为根目录进行映射;

在这里插入图片描述

路径映射

切换到Mappings选项卡,设置路径映射;
后面会将代码上传到容器的映射路径下进行运行;
Local path:本地项目的路径;
Deployment path:容器的映射路径,可以自定义需要映射的路径;

在这里插入图片描述

上传本地代码和数据到docker容器

点击Tools-Deployment-Upload to htcn
也可以点击下方的Automatic Upload,自动上传代码,配置一次,之后就不需要手动上传了,每次在本地保存了代码,就会自动上传,在pycharm底部的File Transfer中可以看到上传记录;

在这里插入图片描述
设置python环境

选择SSH Interpreter-Existing server configuration,点击…和刚才一样配置,配置完之后点击Move,点击next;

在这里插入图片描述

在弹出的选项卡中进行设置:

  • 选择好容器内部的python环境,注意需要在容器中安装好运行代码所需的包;
  • 设置好路径映射

在这里插入图片描述

配置成功,运行代码即可。

Tips:

  • 如果有多个容器,每次重启之后,容器的ip地址都会发生变化,这时候就需要重新修改前面配置的Tools-Deployment-configuration和file-Settings-Project-Python Interpreter里的ip。

报错及解决办法

报错1:cannot connect to the docker daemon at unix

解决方案

参考网址,在本地修改两个文件的权限即可。

sudo chmod a+rwx /var/run/docker.sock
sudo chmod a+rwx /var/run/docker.pid

报错2:使用apt install报错E: Unable to locate package

解决办法:

参考docker下使用apt install报错E: Unable to locate package
把ubuntu主系统中的sources.list文件复制进docker,然后更新源即可。

cp sources.list /etc/apt/sources.list
apt update

报错3:ssh: connect to host 172.17.0.1 port 8080: Connection refused

解决办法:

进入对应容器,重启ssh服务

/etc/init.d/ssh restart

退出容器,测试能否连接

ssh root@172.17.0.1 -p 8080

PS:也可能由于容器内没有设置密码导致。

报错4:error pulling image configuration: Get … : dial tcp …: i/o timeout

解决办法:

网络不好,可以参考前文为docker配置国内源。

[1]:pycharm Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run
[2]:添加和修改docker容器端口映射的方法
[3]:Docker安装问题解决–error pulling image configuration: Get https://dseasb33srnrn.cloudfront.net/
[4]:Docker 配置国内镜像源加速

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_mountainriver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值