WIN10安装
1.BIOS开启虚拟化,任务管理器->性能,看虚拟化是否有无被禁用
2.电脑的控制面板->程序->启用或关闭Windows功能->把Hyper-v勾上,启用后电脑会重启,后面就可以下载并安装Docker for Windows了。
docker windows exe下载:
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
更改docker下载源:
右键settings Docker Engine
"registry-mirrors": [
"https://aad0405c.m.daocloud.io",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
测试
docker run hello-world
docker run -p 8088:80 --name webserver -d nginx:stable
docker run -it --name ubuntubash ubuntu bash
docker run -p 3308:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
常用的Docker命令
查看当前 docker 应用的情况
sudo docker ps -l
docker ps -a
docker rm 容器ID/容器名称 //可以根据容器ID或者容器名称删除容器
开启一个名称为unruffled_mcnulty的容器内部
sudo docker start unruffled_mcnulty
关闭一个名称为unruffled_mcnulty的容器内部
sudo docker stop unruffled_mcnulty
进入一个名称为unruffled_mcnulty(或者id也行)的容器内部
sudo docker exec -it unruffled_mcnulty bash
sudo docker exec -it c8058f6d9bf5 bash
sudo docker exec c8058f6d9bf5 bash -c "cd ~/catkin_ws && ls" //直接执行命令
/etc/hosts 每次启动新容器的时候,里面保存的信息会丢失
拉取一个ros镜像:
sudo docker run -ti mpkuse/kusevisionkit:ros-kinetic-vins
重新命名
sudo docker rename discourse_app disc_app
指定名称,添加一些参数
sudo docker run -d --name new -ti mpkuse/kusevisionkit:ros-kinetic-vins
-d标志告诉docker在后台运行分离模式的容器并打印新的容器ID。
-p 宿主机端口到容器端口的映射
-p 6666:22 将宿主机的6666端口映射为ssh服务端口22
-t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.
sudo docker run --runtime=nvidia -it \
--add-host `hostname`:172.17.0.1 \
--env ROS_MASTER_URI=http://`hostname`:11311/ \
--env CUDA_VISIBLE_DEVICES=0 \
--hostname happy_go \
--name happy_go \
mpkuse/kusevisionkit:vins-kidnap bash
镜像信息都保存在:
/var/lib/docker
详细的信息可以找:
/var/lib/docker/image/overlay2/repositories.json
查看某一个容器应用的ip地址:
docker inspect <container name>
docker本地文件和容器进行文件交换
docker cp 本地文件路径 ID全称:容器路径
挂载目库
docker run -it -v /test:/soft centos /bin/bash
构建自己的镜像
在文件夹中创建三个文件:Dockerfile,app.py,requirements.txt。分别填写以下内容:
1.Dockerfile:
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
2.app.py:
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
3.requirements.txt:
Flask
Redis
运行:
docker build -t friendlyhello .
查看,发现已有新的images:
docker images
运行:
docker run -p 4000:80 friendlyhello