docker基础操作--学习笔记

Docker 官网:https://www.docker.com

讲解:只要一小时,零基础入门Docker

比较好的视频教程:B站十五分钟速成

docker操作

什么是docker

Docker 可以打包程序和程序依赖的环境,放入到一个容器中。这个容器可移植到其他Linux系统中,使得程序更容易交付。容器是完全使用沙箱机制。

在这里插入图片描述

Docker 分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

docker安装(带NVIDIA显卡)

各个平台安装,参考:Windows Docker 安装, Ubuntu Docker 安装

安装GPU版本的tensorflow,要安装 nvidia-docker

# 安装docker
sudo curl -sS https://get.docker.com/ | sh

# 本地有GPU,继续执行以下命令以支持GPU调用,即nvidia-docker
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 -y nvidia-container-toolkit
sudo systemctl restart docker

三个概念:镜像、容器、仓库

  • 镜像 Image:

    镜像相当与虚拟机中的img或者iso文件。类比于程序开发中的class,是一个模板,用于创建实例。

  • 容器 Container:

    容器可以类比做正在运行中的虚拟机,或者类比于程序开发中类生成的对象。一个镜像可以启动多个容器。类比于一个iso可以运行成很多个虚拟机。

  • 仓库 Repository:

    类似于github仓库,可以创建一个自己账号,把做好的镜像放到在线仓库里,通过pull命令可以随时拉取下来。推荐的仓库有Docker Hub.

tar文件

类似于vm使用过程中的vmdk文件,可以将一个镜像保存成tar文件,通过load就可以将一个tar文件加载成一个镜像。

Dockerfile

配置文件,指定一个镜像如何构建,通过docker build可以构建成一个镜像。

常用命令

仓库:一般取ID的前2个就行。
镜像:一般都是镜像名称全名操作。

## 镜像
docker pull [镜像名称](:[版本tag])	# 从远程仓库获取镜像
docker images	# 查看本地有哪些镜像
docker rmi [镜像名](:[版本tag])	# 删除本地镜像 注意:被删除的镜像需要没有正在运行的容器,否则无法删除


## 容器
docker run [镜像名称]:[版本]	# 将镜像运行成容器(虚拟机)
docker container run [镜像名称]:[版本]
# eg
docker run -it ubuntu /bin/bash	# 直接进入容器
docker run -itd --name ubuntu-python ubuntu /bin/bash	# 只会后台运行,后面需要exec -it进入容器
# arg:
# -d 后台运行 detached, 默认是前台运行
# -p [外部端口]:[内部端口] 端口映射
# -v [外部文件路径]:[内部文件路径] 文件映射
# --name [容器名字] 设置运行起来的容器名字
# --gpus all docker里支持显卡的读取
# --rm 容器退出时能够自动清理容器内部的文件系统
# --shm-size [多少G] 指定docker可使用内存空间大小
# --net="bridge" 指定容器的网络连接类型,支持 bridge/host/none/container四种类型
# -it 以交互模式运行容器interactive terminal,分配一个shell

docker ps	# 查看本地正在运行的有哪些容器
docker container ls -a	# 查看本地存在的容器(包括未启动)
docker container start [container Id]	# 启动被关掉的容器
docker start [containerID 取前几位能唯一分辨就可以]	# 启动已经停止的容器
docker stop [containerID 取前几位能唯一分辨就可以]	# 停止容器
docker rm -f [containerID 取前几位能唯一分辨就可以]	# 删除容器

docker exec -it [ContainerID 取前几位能唯一分辨就可以] /bin/bash	# 进入正在后台运行的容器
docker commit [containerID 取前几位能唯一分辨就可以] [用户名]:[新的镜像名称]:[tag]	# 修改容器内容后commit镜像
docker logs [containerID 取前几位能唯一分辨就可以]	# 查看容器运行的日志

# 把当前容器放到后台
# control + P 然后再按 Q

# 基于Dockerfile文件构建,dockerfile文件语法不在本文叙述范围
# -t [镜像名字] 指定新构建的镜像名 -t -tag
docker build -t [镜像名] [dockerfile所在文件夹的路径,不包括dockerfile自身] .


## tar文件
docker save [镜像名] >[tar文件名]	# 镜像保存成tar文件
docker load < [tar文件名]	# tar文件加载成镜像

## 镜像传到dockerhub
# 登陆 docker hub: htttps://hub.docker.com
docker login
# username: docker hub上注册的账号
# password: docker hub上所注册账号的密码

# 给镜像打tag,作用相当于给镜像重命名,注意新镜像名称即推送到远程仓库的名称,且必须严格按照[用户名]/[新镜像名称]:[新镜像tag]格式命名
docker tag [本地镜像ID](or [本地镜像名字]:[本地镜像tag]) [远程用户名]/[新镜像名称]:[新镜像tag]
# 推送
docker push [远程用户名]/[新镜像名称]:[新镜像tag]

Dockerfile语法

详细参考:Docker Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

常见命令:

FROM python:3	# 定制需要的基础镜像,这里以python为例

RUN echo 'hello, world!' > hello.py	# 执行后面的命令行,等同终端的shell命令
CMD <shell 命令>		# 类似 RUN 命令

COPY <源路径> <目标路径>	# 复制文件或者目录到容器里的指定路径
ADD <源路径> <目标路径>	# 与COPY功能类似,官方推荐使用 COPY

ENV <key> <value>	# 设置环境变量。后续的指令中,就可以使用 $key 引用这个环境变量
ARG <参数名>[=<默认值>]	#构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。

WORKDIR <工作目录路径>	# 指定工作目录。(WORKDIR 指定的工作目录,必须是提前创建好的)

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

运行python程序实例

test文件夹下,有3个文件:hello.pyrun.shDockerfile

文件hello.py

import numpy
print('hello, world!')

文件run.sh

#!/bin/bash
python3 hello.py

文件Dockerfile

FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3	# 基础镜像来源
RUN pip3 install numpy	# 构建镜像时候,安装numpy

ADD hello.py /workspace	# 添加hello.py到workspace文件夹下
ADD run.sh /workspace	# 添加run.sh到workspace文件夹下
# 或者使用 ADD . /workspace 添加当前目录下所有文件到workspace文件夹下

WORKDIR /workspace	# 设定workspace为工作目录
CMD ["sh","run.sh"]	# 运行镜像成为仓库的时候,执行run.sh

(不推荐)cd到test文件夹下,执行以下命令,可以直接运行得到结果,但是不推荐,因为不可调试:

docker build -t hello:1.0 .		# 构建镜像hello,版本是1.0。主意最后有一个字符".",指定的是当前目录下的Dockerfile
docker images				# 查看镜像,可以看到有hello镜像存在
docker run hello			# 运行镜像,得到容器。可以看到输出:hello, world!

(推荐)或者进入仓库,比较推荐,因为可以进行调试:

docker build -t hello:2.0 .		# 构建镜像hello,版本是2.0。主意最后有一个字符".",指定的是当前目录下的Dockerfile
docker run -itd hello:2.0 /bin/bash		# 运行镜像,得到容器
# 此时会得到一个长的无规则的容器ID号码,一般只需要ID前两位就可指定为对应的容器
# 假定ID为:e8656212a9c4
docker exec -it e8 /bin/bash	# 进入容器内部,其实就是进入了Ubuntu系统中,可以进行shell命令了

# 下面是容器内部的shell命令
#######################################
apt-get update	# 更新源,方便后面安装库
apt-get install vim		# 安装vim,可以使用vim命令了
# 可以进行一系列的操作了,比如修改code等
exit		# 调试完毕后,exit退出容器
#######################################

docker commit e8 hello:3.0		# 保存修改后的容器,为镜像hello,版本是3.0
docker push hello:3.0		# 推送到云端,需要登陆账号

搭建python环境

参考:docker搭建ubuntu–python环境

docker image pull ubuntu
docker image
docker run -itd --name ubuntu_python -p 9977:22 ubuntu /bin/bash
docker exec -it 容器ID /bin/bash

apt-get update
apt-get install sudo	# 安装sudo命令
sudo passwd root	# 激活root用户

# 安装python,和虚拟环境virtualenv,安装vim(之后会用到)
apt-get install python
apt-get install python3
apt-get install virtualenv
apt-get install virtualenvwrapper
apt-get install vim

# 配置虚拟环境
mkdir ~/.virtualenvs	# 创建虚拟环境存放目录
vi ~/.bashrc	# 编辑环境配置文件

# 文件 .bashrc 中内容添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

# 保存退出后执行如下
source .bashrc

# 创建虚拟环境,创建的虚拟环境默认的解释器为先安装的python版本
mkvirtualenv py_2

# 将当前容器保存为镜像
docker commit 容器ID前两位 镜像名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值