1.安装
Get Docker Engine - Community for Ubuntu
2.在docker中运行容器
1)获取镜像:下载镜像或用dockerfile制作镜像
docker pull ubuntu:16.04 #举例,下载镜像Ubuntu16.04
docker build -t runoob/ubuntu:v1 . #讲当前目录下的dockerfile编译成镜像文件,设置标签为runoob/ubuntu:v1
2)启动容器
docker run -it {REPOSITORY:TAG} #获取帮助docker run --help
3.Docker容器和本机之间的文件传输
docker cp 本地文件 CONTAINER:容器路径 #本地文件传输到容器中
docker cp CONTAINER:容器文件 本地路径 #容器文件传输到本地中
4.显示容器的GUI
1)将容器GUI显示到宿主机上(这种方法只能显示在运行该容器的主机上)
A.在宿主机中
1.查看宿主机IP
$ ifconfig ##假设为xxx.xxx.xxx.xx
2.查看当前显示的环境变量值
$ echo $DISPLAY (要在显示屏查看,其他ssh终端不行) ##假设为:0
3.安装xserver
$ sudo apt install x11-xserver-utils
4.增加许可网络连接,在 /etc/lightdm/lightdm.conf 中添加:
[SeatDefaults]
xserver-allow-tcp=true
5.重启xserver
$ sudo systemctl restart lightdm #此指令会关闭桌面所有程序,适用于ubuntu16.04
$ sudo service restart lightdm #此指令会关闭桌面所有程序,适用于ubuntu14.04
6.许可所有用户都可访问xserver
$ xhost +
B.在docker 容器内
# export DISPLAY=xxx.xxx.xxx.xx:0
注意:环境变量设置需要每次进docker设置,可以写在:/etc/bash.bashrc 文件中,避免每次进终端时设置
2)本机通过ssh登录服务器,容器GUI显示在本机
1.在本机允许所有用户访问X11服务
$ sudo apt-get install x11-xserver-utils
$ xhost +
2.检查服务器上的/etc/ssh/sshd_config文件,是否已经有『X11Forwarding yes』这样的配置,如果没有则需要加上。
3.本机通过ssh连接到服务器,注意加上-X参数
$ ssh -X @
4.运行docker容器
$ docker run -it \
-v /etc/localtime:/etc/localtime:ro \
--net=host \
-e DISPLAY=:10.0 \
-v $HOME/slides:/root/slides \
-v $HOME/.Xauthority:/root/.Xauthority \
--name {container name} \
{REPOSITORY:TAG}
注意:将DISPLAY的值修改成服务器中DISPLAY的值
3)验证设置是否正确code snippet widget
1.Docker容器中安装时钟显示工具
$ apt install xarclock
2.Docker容器中启动时钟显示工具,观察屏幕上是否显示
$ xarclock
5.docker容器使用本机硬件设备
启动容器时,添加privileged参数:
docker run --privileged=true -it --name test ros:indigo
注意:经测试,只有启动容器时还连在本机上的硬件,才会被容器识别到,启动后连接的设备不会被识别
6.将宿主机目录挂载到容器里,挂载目录会在宿主机和容器间共享
docker run -it -v /test:/soft centos
7.IP设置
1) 使用默认网络
Docker安装后,默认会创建下面三种网络类型:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local #默认选项,按容器启动顺序分配IP,因此每次启动IP都会变
1252da701e55 host host local #容器网络附属到主机上,两者互通
237ea3d5cfbf none null local #不分配IP
启动时可以指定其中一种:
docker run --network bridge/host/none -it --name test ros:indigo
2)自定义IP地址
docker network create --subnet=172.18.0.0/16 mynetwork #创建自定义网络
docker run -it --name test --network mynetwork --ip 172.18.0.2 ros:indigo #启动容器时使用自定义网络,且指定IP,注意要与自定义网络处于同一网段
8.在容器中打开终端的方法
docker run -it --name test ros:indigo #新建容器时,打开一个终端
docker start -i test #启动容器时,打开一个终端
docker exec -i test /bin/bash #运行/bin/bash程序时,打开一个终端
tmux #tmux终端复用软件(常用)
其他常用命令:
docker start #启动处于exit状态的容器,相当于开机
docker stop #停止处于运行状态的容器,相当于关机
docker exec #在运行状态中的容器中运行一个程序,可运行/bin/bash来启动一个新终端
docker rm #删除容器
docker rmi #删除镜像
docker rename #重命名容器
docker commit #将当前容器编译为新镜像
参考:
1.Docker相关:https://note.youdao.com/ynoteshare1/index.html?id=e75449a07b29a1387143ab5fcb52df31&type=note&from=singlemessage#/
2.Docker容器和本机之间的文件传输:https://blog.csdn.net/Leafage_M/article/details/72082011
3.Docker运行GUI软件的方法:https://www.csdn.net/article/2015-07-30/2825340
4.Docker学习总结之Run命令介绍:https://www.cnblogs.com/vikings-blog/p/4238062.html
5. https://yq.aliyun.com/articles/606756