1,安装
1.1 ubuntu18.04
uname -r # 内核>=3.1
sudo apt-get remove docker \
docker-engine \
docker.io # 删除已安装的docker
sudo apt-get update # 更新
sudo apt-get install apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce # ce,communication,社区版
1.3 卸载docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
1.4 centos安装docker
uname -r
yum -y install docker-ce
service docker start
docker run hello-world
vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false
systemctl daemon-reload
service docker restart
service docker status
卸载docker
2,docker基础配置
2.1 docker配置aliyun镜像
登录https://cr.console.aliyun.com/undefined/instances/mirrors,镜像中心->镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["xxx-镜像加速地址-xxx"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker # 重启docker
sudo docker info # 查看docker信息
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
newgrp docker # update docker group
2.2 容器显卡设置
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-container-toolkit
service docker restart
3,docker相关的指令
systemctl start docker # 启动docker
service docker start # 启动docker
systemctl stop docker # 停止docker
systemctl restart docker # 重启docker
systemctl enable docker # 开机启动docker
service docker status # 查看docker状态
4,docker镜像相关指令
docker info # 查看docker概要信息
docker --help # 查看docker帮助文档
docker version # 查看docker版本信息
docker pull ubuntu:18.04 # 从阿里云拉一个镜像,centos:7,hello-world
docker images # 显示所有镜像
docker search xx # 搜索镜像
docker images -qa # 列出所有镜像的id
docker rmi -f fce289e99eb9 # 删除镜像,参数,IMAGE ID
docker rmi -f $(docker images -qa) # 删除所有镜像
5.docker容器相关指令
有镜像才能创建容器
5.1 运行,run
docker run [可选参数] image
--name="镜像名字" 容器名
-d 后台运行
-it 交互方式运行,进入容器查看内容
-p 指定端口 -p 8080:8080 主机端口:容器端口
-v 挂在磁盘 -v /hone/data:/root/data 主机路径:容器路径
# 运行centos
docker run -it centos /bin/bash
exit # 从容器退出主机, ctrl+alt+p退出,不退出进程
# 创建容器
docker run --gpus all -itd --name container_name -v /home/nvidia/data:/root/data yolo:l4t /bin/bash
--workdir /root
--runtime=nvidia
# 使用GPU,容器名,挂在盘,镜像及版本
--dns 8.8.8.8 --dns 8.8.4.4 --network=host # 连接外网
--cpu-cpus 1 -m 2G --memory-swap 8G # 1核2G内存8G交换内存
-p 20022:22 # 端口映射
docker network create -d bridge class.com # 创建网桥 --network=class.com
docker network connect class.com container_id # 运行容器连接网桥,[网桥名称] [容器名称]
# 1.容器添加端口
1. sudo docker stop 容器Id # 停止容器,为其添加端口映射
2. sudo docker inspect 容器Id | grep Id # 查看容器Id
3. cd /var/lib/docker/containers/container_id
4. vim hostconfig.json # 键,内部端口,值,外部端口,8080/tcp内部端口
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8080"}]}
5. vim config.v2.json
"ExposedPorts":{"8080/tcp":{}}
"Ports":{"8080/tcp":[{"HostIp":"0.0.0.0","HostPort":"8080"}]}
6. sudo systemctl restart docker # 重启docker
7. sudo docker port 容器Id
8000/tcp -> 0.0.0.0:8080 # 内部端口 -> 外部端口
8000/tcp -> :::8080
# 2.容器添加挂在目录
1. sudo docker stop 容器Id # 停止容器,为其添加端口映射
2. sudo docker inspect 容器Id | grep Ip # 查看容器Id
3. cd /var/lib/docker/containers/container_id
4. vim hostconfig.json
"Binds":["/data:/import"] # 数组,多个,隔开。外部挂在盘:内部挂在盘
5. vim config.v2.json
"MountPoints": {
...
"/import":{ # 内部挂在目录
"Source":"data", # 外部挂在目录
"Destination":"/import", # 内部挂在目录
"RW":true,"Name":"","Driver":"","Type":"bind","Propagation":"rprivate",
"Spec":{
"Type":"bind",
"Source":"data", # 外部挂在目录
"Target":"/import"}, # 内部挂在目录
"SkipMountpointCreation":false
}
} # MountPoints
6. sudo systemctl restart docker # 重启docker
7. docker inspect 容器Id | grep Mounts -A 20
5.2 常用镜像
sudo docker pull pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel # cuda=10.2
sudo docker pull pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel # cuda=11.3
sudo docker pull nvcr.io/nvidia/tensorrt:21.05-py3 # tensorrt
5.3 容器操作
# 查看正在运行的容器
docker ps
docker ps -a # 查看历史运行的容器
docker ps -n=1 # 显示最近创建的容器
docker ps -q # 只显示容器的编号
docker start 容器id # 启动
docker restart 容器id # 重启
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止容器
docker status 容器id # 查看容器状态
docker rm 容器id # 删除容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq) # 删除所有的容器
6 docker其他命令
docker exec -it 容器id /bin/bash # 方式一,开启新的终端,可以操作
docker attach 容器id # 方式二,进入容器正在运行的终端
docker cp 容器id:/root/1.txt /home # 容器 -> 主机
docker cp 1.txt 容器id:/root # 主机 -> 容器
docker logs -tf 容器id # 查看日志
docker logs -tf --tail 10 容器id # 显示启动容器的最后10条
docker top 容器id # 查看容器中的进程信息
docker inspect 容器id # 查看容器的元数据
docker commit 容器id 镜像:版本 # 容器 -> 镜像:版本
docker save hello:latest > hello.tar.gz # 镜像打包
docker save hello:latest | gzip > hello.tar.gz # 压缩打包,减小一半空间
docker load -i hello.tar.gz # 镜像加载
6.6 本地连接docker
1.进入容器,修改ssh配置文件,root可以访问
vim /etc/ssh/sshd_config
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径
PermitRootLogin yes #root能使用ssh登录
7 制作docker镜像
8 docker-compose
8.1 linux安装
sudo curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
8.2 docker-compose的使用
docker-compose.yml # docker-composer文件
version: 3.0
services:
rtsp_server: # 服务名
image: tomcat:jre-8 # 镜像:版本
container_name: server # 容器名称
environment:
OPENBLAS_CORETYPE: ARMV8
LC_ALL: "zh_CN.utf8"
ports:
- "8080:8080" # 端口映射
volumes:
- "/data:/data" # 挂在卷
working_dir: /opt/data
command:
- /bin/bash
- -c
- "bash start_rtsp_flask.sh" # 启动指令
docker network create -d bridge hello # 创建网桥,docker容器内部通信
docker-compose up # 启动服务,-d 后台进程启动
创建,删除,重启,日志,查看
https://www.runoob.com/docker/docker-compose.html
相关链接
https://yeasy.gitbooks.io/docker_practice/install/ubuntu.html