docker安装

概述

官网: https://docs.docker.com/

1080Ti机器中,lxw_cu100:v1版本没用ninja-build,需要自行安装,lxw_cu100:v2版本为pytracking跟踪算法完整镜像,可以直接进行使用。

docker jupyter 端口 docker -p udp_docker jupyter 端口

Docker Hub 网站

https://hub.docker.com/ 根据已知镜像创建容器,进入容器(名字/id(前四位数字即可))和退出容器

docker jupyter 端口 docker -p udp_windows_02

docker jupyter 端口 docker -p udp_windows_03

docker jupyter 端口 docker -p udp_docker_04

电脑重启后,进入容器首先要将容器run起来(会提示容器没有run起来),

docker jupyter 端口 docker -p udp_ubuntu_05

改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

容器较为官方的解释

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。

容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。

docker jupyter 端口 docker -p udp_docker_06

容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
容器较为通俗的解释
如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。

虚拟化技术和容器化技术

虚拟化技术

首先,Docker 容器虚拟化技术为基础的软件,那么什么是虚拟化技术呢?
简单点来说,虚拟化技术可以这样定义:
虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。

1、Docker安装

查看系统内核和系统信息

命令

docker jupyter 端口 docker -p udp_docker jupyter 端口_07


示例:

docker jupyter 端口 docker -p udp_docker_08

2、开始安装Docker

卸载旧版本

docker jupyter 端口 docker -p udp_windows_09


命令:

yum remove docker 
 docker-client 
 docker-client-latest 
 docker-common 
 docker-latest 
 docker-latest-logrotate 
 docker-logrotate 
 docker-engine

docker jupyter 端口 docker -p udp_ubuntu_10


下载依赖安装包(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

docker jupyter 端口 docker -p udp_windows_11

更新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 # 设置开机自启动

docker jupyter 端口 docker -p udp_docker_12


Ubunto系统(无权限)

docker jupyter 端口 docker -p udp_windows_13


Ubunto系统(sudo权限)

docker jupyter 端口 docker -p udp_docker_14

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 jupyter 端口 docker -p udp_windows_15


镜像命令

docker images 查看本地主机的所有镜像

示例:

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest feb5d9fea6a5 6 months ago 13.3kB

docker jupyter 端口 docker -p udp_docker jupyter 端口_16


docker jupyter 端口 docker -p udp_ubuntu_17


docker jupyter 端口 docker -p udp_docker jupyter 端口_18

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 jupyter 端口 docker -p udp_docker_19


自己创建容器时需修改(添加端口见后续)

启动容器

docker start [容器ID]

进入容器
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker exec-it [容器ID] /bin/bash

exit 退出容器

#exit 停止并退出容器(后台方式运行则仅退出)

#Ctrl+P+Q 不停止容器退出

[root@bd1b8900c547 /]# exit

docker jupyter 端口 docker -p udp_windows_20


[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

docker jupyter 端口 docker -p udp_windows_21


退出容器使用ctrl+D按键。

拉取镜像要在Dockerfile文件夹下的Dockerfile文件所在的终端运行sudo docker build -t 名字:版本 . 来构建镜像。

docker jupyter 端口 docker -p udp_docker_22


docker jupyter 端口 docker -p udp_docker jupyter 端口_23


docker jupyter 端口 docker -p udp_ubuntu_24


docker jupyter 端口 docker -p udp_docker_25