参考docker官方文档
由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
更新apt包索引:
$ sudo apt-get update
安装以下包以使apt可以通过HTTPS使用存储库(repository):
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方的GPG密钥:
#这里官方文档没有加sudo,一开始一直没成功。
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
使用下面的命令来设置stable存储库:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
再更新一下apt包索引:
$ sudo apt-get update
安装最新版本的Docker CE:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
Ubuntu18.04可以直接安装最新版,Ubuntu16.04在这里依赖出现了问题
下列软件包有未满足的依赖关系:
containerd.io : 依赖: libseccomp2 (>= 2.4.0) 但是 2.2.3-3ubuntu3 正要被安装
docker-ce : 依赖: libseccomp2 (>= 2.3.0) 但是 2.2.3-3ubuntu3 正要被安装
推荐: aufs-tools 但是它将不会被安装
推荐: cgroupfs-mount 但是它将不会被安装 或
cgroup-lite 但是它将不会被安装
推荐: pigz 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
可以选择指定低版本:
sudo apt install docker-ce=17.03.2~ce-0~ubuntu-xenial
如果你是当安装libltdl7报错如下:
Depends: libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
Recommends: aufs-tools but it is not going to be installed
只需要:
apt-get install -y libltdl7 libseccomp2
安装完成,验证docker
通过运行hello-world映像来验证Docker Engine是否已正确安装:
$ sudo docker run hello-world
出现Hello from Docker!,安装成功。
配置docker
sudo usermod -aG docker 用户名 //获得权限
配置完重启docker服务:
sudo service docker restart
通过Dockerfile创建docker镜像,新建一个docker-file文件夹并创建Dockerfile文件,requirements.txt文件,将gym-carla文件夹打包放入文件夹。
在Dockerfile文件写入以下内容:
FROM python:3.6
MAINTAINER wangpeng
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
CMD ["/bin/bash"]
requirements.txt文件写入:
gym==0.12.5
pygame==1.9.6
scikit-image==0.16.2
在docker-file文件夹打开终端并创建镜像,镜像名为gym-docker:0.1,注意后面有一个.与镜像名之间有空格。
wang@wang-m920t:~/docker-file$ docker build -t gym-docker:0.1 .
docker run -it gym-docker:0.1
tar -xzvf gym.tar.gz
https://github.com/cjy1992/gym-carla按照gym-carla配置一下环境,python包已经安装好了。
pip install -e .
gym-carla要用carla里的carla-0.9.6-py3.5-linux-x86_64.egg文件,现在打开另一个终端将这个文件上传给docker容器。79c04e667618是现在运行的容器名。将该文件复制到了79c04e667618的/app目录下。
docker cp /home/wang/CARLA_0.9.6/PythonAPI/carla/dist/carla-0.9.6-py3.5-linux-x86_64.egg 79c04e667618:/app
写入python环境变量并source ~/.bashrc使生效。
echo export PYTHONPATH=$PYTHONPATH:/app/carla-0.9.6-py3.5-linux-x86_64.egg >> ~/.bashrc
运行gym-carla中的test.py,有一个错误:
缺少库文件。
下载该文件:
wget https://jpegclub.org/support/files/jpegsrc.v8d1.tar.gz
解压:
tar -xzvf jpegsrc.v8d1.tar.gz
进入该文件夹编译安装:
./configure
make
make install
make test
写入环境变量:
echo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib >> ~/.bashrc
source ~/.bashrc
再次运行test.py
默认连接本地carla服务,找不到。查看docker ip:
修改代码:
vim gym-carla/gym_carla/envs/carla_env.py
将第88行里的localhost改为172.17.0.1。保存退出。
没有vim,使用apt安装,apt update,apt install vim。
在本机运行carla文件,./CarlaUE4.sh
运行容器test.py
连接成功!
exit退出docker保存为新镜像,版本号为0.1.1。
docker commit 79c04e667618 gym-carla:0.1.1