docker安装
概述
官网: https://docs.docker.com/
1080Ti机器中,lxw_cu100:v1版本没用ninja-build,需要自行安装,lxw_cu100:v2版本为pytracking跟踪算法完整镜像,可以直接进行使用。
Docker Hub 网站
https://hub.docker.com/ 根据已知镜像创建容器,进入容器(名字/id(前四位数字即可))和退出容器
电脑重启后,进入容器首先要将容器run起来(会提示容器没有run起来),
改pip源:
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
容器较为官方的解释
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
容器较为通俗的解释
如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
虚拟化技术和容器化技术
虚拟化技术
首先,Docker 容器虚拟化技术为基础的软件,那么什么是虚拟化技术呢?
简单点来说,虚拟化技术可以这样定义:
虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。
1、Docker安装
查看系统内核和系统信息
命令
示例:
2、开始安装Docker
卸载旧版本
命令:
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
下载依赖安装包(centos系统命令为yum)
yum install -y yum-utils
1
配置镜像仓库
#国外的地址
yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo
设置阿里云的Docker镜像仓库
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包
yum makecache fast
更新索引的时候出错,即centos8没有该参数,解决办法为:去掉fast参数
下载docker
yum install docker-ce docker-ce-cli containerd.io # 安装社区版
yum install docker-ee docker-ee-cli containerd.io # 安装企业版
一般情况下安装社区版
3、启动Docker
命令:
systemctl start docker # 启动Docker
docker version # 查看当前版本号,是否启动成功
systemctl enable docker # 设置开机自启动
Ubunto系统(无权限)
Ubunto系统(sudo权限)
4、Docker卸载
(centos系统)
yum remove docker-ce docker-ce-cli containerd.io # 卸载依赖
rm -rf /var/lib/docker # 删除资源 . /var/lib/docker是docker的默认工作路径
(ubunto系统)
pip remove docker-ce docker-ce-cli containerd.io # 卸载依赖
rm -rf /var/lib/docker # 删除资源 . /var/lib/docker是docker的默认工作路径
Docker-镜像常用命令(search,查看)
命令的帮助文档地址: https://docs.docker.com/engine/reference/commandline/docker/
命令:
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
docker COMMAND --help
镜像命令
docker images 查看本地主机的所有镜像
示例:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
docker search 搜索镜像
docker pull 镜像名[:tag] 下载镜像
docker rmi 删除镜像
#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)
容器命令
docker run [可选参数] image 运行容器
5、启动和进入容器
根据镜像创建容器
自己创建容器时需修改(添加端口见后续)
启动容器
docker start [容器ID]
进入容器
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec-it [容器ID] /bin/bash
exit 退出容器
#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q 不停止容器退出
[root@bd1b8900c547 /]# exit
[root@iZwz99sm8v95sckz8bd2c4Z ~]#
docker ps列出容器
#docker ps
# 列出当前正在运行的容器
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器 (default -1)
-q # 只显示容器的编号
-s # 显示总文件大小
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
703fad61eccb c20987f18b13 “docker-entrypoint.s…” 2 minutes ago Exited (0) 2 minutes ago inspiring_feistel
2e6f020d0299 c20987f18b13 “docker-entrypoint.s…” 3 minutes ago Exited (1) 3 minutes ago angry_stonebraker
a4889b27716f hello-world “/hello” 14 minutes ago Exited (0) 14 minutes ago trusting_mcclintock
docker rm删除容器
选项:
-f # 移除正在运行的容器(使用SIGKILL)
-l # 移除容器间的网络连接,而非容器本身
-v # 删除与容器关联的卷
docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q | xargs docker rm # 删除所有的容器
启动和重启容器命令
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
其他命令
后台启动容器
#命令 docker run -d 镜像名
$ docker run -d ubuntu
c21cd5dd2594ec109dfb7e8eeba6bd129291de1f1095389c9b31492e98360947
#问题docker ps,发现ubuntu停止了
#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用了,就会自动停止
#nginx,容器启动后发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
$ docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
-f # 跟踪日志输出
–since # 显示某个开始时间的所有日志
-t # 显示时间戳
-n # 仅列出最新N条容器日志(默认为“全部”)
常用:
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数
docker logs -n number 容器id #num为要显示的日志条数
#docker容器后台运行,必须要有一个前台的进程,否则会自动停止
#编写shell脚本循环执行,使得centos容器保持运行状态
$ docker run -d centos /bin/sh -c “while true;do echo hi;sleep 5;done”
f51f3cbb27511b49d85c98fa62691a1a19397d4a272a8cc7d4769d3d6ec41f2a
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f51f3cbb2751 centos “/bin/sh -c 'while t…” 10 seconds ago Up 9 seconds busy_ride
$ docker logs -tf --tail 10 f51f3cbb2751
2022-04-18T07:24:27.364628955Z hi
2022-04-18T07:24:32.365938530Z hi
2022-04-18T07:24:37.367324268Z hi
2022-04-18T07:24:42.368615239Z hi
2022-04-18T07:24:47.369976390Z hi
2022-04-18T07:24:52.371426169Z hi
2022-04-18T07:24:57.372834380Z hi
2022-04-18T07:25:02.374156939Z hi
2022-04-18T07:25:07.375425598Z hi
查看容器中进程信息
命令 docker top 容器id
$ docker top f51f3cbb2751
UID PID PPID C STIME TTY TIME CMD
root 17874 17853 0 15:24 ? 00:00:00 /bin/sh -c while true;do echo hi;sleep 5;done
root 18164 17874 0 15:25 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 5
查看镜像的元数据
$ docker inspect 容器id
#docker inspect : 获取容器/镜像的元数据。
#语法
docker inspect [OPTIONS] NAME|ID [NAME|ID…]
#OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
–type :为指定类型返回JSON。
进入当前正在运行的容器
方式一:
我们通常容器使用后台方式运行的, 需要进入容器,修改一些配置
命令
docker exec -it 容器id /bin/bash
测试
docker exec -it df358bc06b17 /bin/bash
[root@df358bc06b17 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@df358bc06b17 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug11 pts/0 00:00:00 /bin/bash
root 29 0 0 01:06 pts/1 00:00:00 /bin/bash
root 43 29 0 01:06 pts/1 00:00:00 ps -ef
方式二
docker attach 容器id
docker exec # 进入容器后开启一个新的终端,可以在里面操作
docker attach # 进入容器正在执行的终端,不会启动新的进程
#语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
#OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
拷贝容器文件到主机
拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
#进入容器中
docker cp 8b84603c410a:/home/test.java /home
ls
alex arod hello.java neos test.java
#拷贝只是一个手动功能,未来我们使用 -v 卷的技术,可以实现自动同步
使用镜像创建容器:
进入容器使用
sudo docker exec -it container-id /bin/bash
退出容器使用ctrl+D按键。
拉取镜像要在Dockerfile文件夹下的Dockerfile文件所在的终端运行sudo docker build -t 名字:版本 . 来构建镜像。