linux docker创建容器教程

目录

0.docker安装

1.docker镜像和容器区别:

2. 拉取镜像:

3. 运行镜像,即->开启容器:

4. docker内上网:

5. 安装各种软件:

6. 通过pycharm远端连接docker内虚拟环境

7. 打包(镜像 tar 迁移)

8. 一些建议

9. nginx配置踩坑(用 nginx 搭建文件下载服务器)

10. Dockerfile文件构建镜像


0.docker安装

直接看官网教程:docker ubuntu安装官方教程链接,很详细!

docker想用gpu,还要安装nvidia-docker2,官网安装教程链接,需要科学上网,只要复制下图内容执行,然后 sudo apt-get update,sudo apt-get install -y nvidia-docker2 即可!

1.docker镜像和容器区别:

镜像是本地文件,容器是正在run运行的,需要将容器 save 或者 export   或者 commit 到本地,尽量不要覆盖原来的镜像;

2. 拉取镜像:

docker pull ***镜像

docker images

docker ps -a

docker stop Container_Name 停止容器

docker rm Container_Name 删除容器

3. 运行镜像,即->开启容器:

docker run --runtime=nvidia -v /home:/home -v /mnt:/mnt -w /home/leilei -it --entrypoint bash -p 4444:22 -p 3333:3389 -d --name cuda8.0-leilei -h pytorch0.3.1 --shm-size 32G nvidia/cuda:8.0-cudnn5.0-devel-ubuntu16.04

命令参数解析:

--runtime 运行环境,nvidia代表可以使用显卡(特别注意:这里前提必须安装nvidia-docker2),也可更改成 --gpus=all 参数

-v 目录映射(宿主机目录绝对路径:容器目录绝对路径),共享目录; /root就是用户目录,cd->pwd就可以得到;(可多次使用) 此处是挂载数据卷

-w 工作目录,进入docker时默认的路径,但不一定是/root,直接cd,再pwd,可以看到/root

-it 进入docker之后命令行交互

--entrypoint 进入docker之后运行的命令

-p 开放端口,便于外部远端访问(4444是开放的外部端口,22默认是docker内的端口,尽量不变)

-p xxxx:3389:3389端口是Server远程桌面的服务端口,可以通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器

--name 给docker容器的命名

-h 给容器主机名hostname命名

-d 后台运行

nvidia/cuda:8.0-cudnn5.0-devel-ubuntu16.04 镜像名字(REPOSITORY:TAG)

注:一定要显式数据卷-v,不会增加内容,缓存随着容器消失而消失!

注意:必须进入容器内,才可以操作,例如nvcc -V等操作,全部默认基于进入容器内!

docker start cuda8.0-leilei 开启容器

docker exec -it cuda8.0-leilei bash 进入容器 以命令行形式

docker stop 容器名 关闭容器

docker rm 容器名 删除容器

若想使用win下面的远程桌面,需要在docker容器内安装 ubuntu-xrdp,并且设置端口号3389,这样才可以使用!!!

4. docker内上网:

【linux 建议ip命令修改查看网络设置】

若服务器有网,容器会自动有网的,此小步骤可略过!这里是笔记本连接无法上互联网的服务器!

首先在本地笔记本电脑上:docker pull dannydirect/tinyproxy 拉取镜像

然后docker run -d --name='tinyproxy' -p <Host_Port>:8888 dannydirect/tinyproxy:latest <ACL> 允许容器

--eg:docker run -d --name='tinyproxy' -p 6666:8888 dannydirect/tinyproxy:latest ANY

再就是 后面的步骤了

---------------------------------------------------------------------------

cd /root

修改.bashrc,添加环境变量(可采用sed -i 'N;4a\export http_proxy=http://<your_ip>:6666' .bashrc命令直接修改)

删除第N行  sed -i 'Nd' filename

若是不知道ip,win下面cmd ipconfig,无线局域网适配器 WLAN IPV4地址

export http_proxy=http://<your_ip>:6666

export https_proxy=http://192.***:6666

source .bashrc

修改apt源:不同版本的ubuntu apt源:点击查看

编辑/etc/apt/sources.list(尽量不能换行)

deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse'''
注意点:ubuntu不同版本有不同的代号,ubuntu16.04的代号:xenial,ubuntu18.04的代号:bionic,替换相关单词即可查看当前ubuntu版本代号命令: cat /etc/*-release  即可看到 VERSION_CODENAME=xenial
ubuntu版本库链接:https://releases.ubuntu.com/
'''

先rm -rf /etc/apt/sources.list.d(下载速度变快,找不到nvidia源和cuda源),再apt-get update

再 apt-get upgrade 更新软件

5. 安装各种软件:

此处单独:(若安装python3.6,请看这里,直接apt-get install python3.6报错,记住直接下载源码编译 最好,先安装依赖环境)

1. python官网下载Gzipped包 Python Source Releases | Python.org

2. 复制到docker容器内 docker cp /**/Python-3.6.8.tgz cuda8.0-leilei(容器名):/root/

3. 逐步执行命令:

(0) 安装python的依赖环境:【apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl libopencv-dev】

(1) tar -xzf Python-3.6.8.tgz

(2) cd python-3.6.8 ; 再执行 ./configure

(3) make

(4) make install

4. which python3   usr/local/bin/python3.6.8  【docker容器内都是 usr/local/bin/】

5. 建立软连接: ln -s /usr/local/bin/python3.6 /usr/local/bin/python

ln -s /usr/local/bin/pip3 /usr/local/bin/pip

#只有先安装python的依赖环境,再安装python3.6,那么python3.6自带python3.6-pip。#

更换pip源:cd (/root 可省); mkdir .pip ; touch pip.conf ; vim pip.conf 将下面3行复制进去

[global]

index-url = http://mirrors.aliyun.com/pypi/simple

trusted-host = mirrors.aliyun.com

docker内配置中文编码环境(若遇不到跳过):

1.locale -a 是否有 C.UTF-8

2.编辑(vim) /root/.bashrc,添加环境变量

export LANG=C.UTF-8

export LC_ALL="C.UTF-8"

export LANG="C.UTF-8"

export LANGUAGE="C.UTF-8"

source .bashrc

即可!

##########################################################################

6. 通过pycharm远端连接docker内虚拟环境

# docker 命令 加入 -p参数

进入docker内执行如下命令:

apt-get update

apt-get upgrade

apt-get install openssh-server

修改ssh文件:vim /etc/ssh/sshd_config : PermitRootLogin prohibit-passwd 改为 PermitRootLogin yes

重启ssh:/etc/init.d/ssh restart

设置docker密码: 命令行执行 passwd 设置密码

pycharm远端连接docker内环境:(将端口号修改成4444即可,用户名默认root,再输入密码即可,找到)

docker内执行which python:将路径直接复制到pycharm里面虚拟环境;然后映射也映射到你的共享目录中某个文件夹

pycharm连接到远端请参考:Pycharm 远端同步设置(SSH Interpreter)_LEILEI18A的博客-CSDN博客

7. 打包(镜像 tar 迁移)

docker commit container_id image_name:tag  #将容器转成镜像

docker save image_id -o /somepath/image_name.tar  # 压缩

8. 一些建议

(1) 尽量采用dockerfile 进行build,有build历史

(2) 尽量采用docker-compose.yml设置; 此处是docker-compose.yml的相关介绍,与docker run命令一一对应注释

# docker-compose.yamlversion: '2.4'services:nginx:image: nginx:1.17.0build: context: .dockerfile: ./nginx.dockerfileports:- "3322:80"volumes:- "./nginx.conf:/etc/nginx/nginx.conf"- "/home/my_dockers/1_download:/usr/share/nginx/files"networks: - aiservice# -d 后台运行是在外面设置, docker-compose up -dai:  # 注:1-当存在镜像与image名字相同时,不会build;2-当image与所有镜像名字不同时,开始build镜像;3-当dockerfile中FROM镜像不存在时,pull拉取镜像image: nvidia/cuda:10.2-cudnn7-devel-ubuntu16.04-lei  # REPOSITORY:TAG;runtime: nvidia  # --runtimebuild:  # build 根据dockerfile文件在image镜像上进行搭建镜像,而非容器!context: .  # 上下文,使用相对路径dockerfile: ./ai.dockerfileargs: http_proxy: http://:6666           # 连接外网https_proxy: http://:6666          # 连接外网index_url: http://mirrors.aliyun.com/pypi/simple  # 阿里源trusted_host: mirrors.aliyun.com                  # 阿里源resources_url: http://:3322           # nginx反向代理,将下载的软件包放置此处ports:  # -p 端口号- "4466:22"volumes:  # -v 数据卷- "/home:/home"working_dir: /home/leilei # -w 工作目录container_name: cuda102-leilei  # --name 容器名hostname: lei    # -h 容器主机名stdin_open: true # -i -it命令交互tty: true        # -t -it命令交互privileged: true  # 一般尽量开启,是真root权限# entrypoint: #?bash --entrypoint; 不用写,直接进入后就是bashshm_size: 32gb  # --shm_size 一般在build外面,build是构建镜像,而非容器,所以没有网络# restart: always # 指定容器退出后的重启策略为始终重启depends_on:  # 依赖,若构建此镜像-运行容器,需要先进行 depends_on中的服务- nginx                       # version3用法https://docs.docker.com/compose/startup-order/, 未看懂# condtion: service_started  # 待nginx服务起来后,才进行当前ai镜像构建-容器运行;version3不再支持!networks: - aiservicenetworks:  # 当只有1个宿主机时,运行的几个容器就是1个局域网,也可以根据networks分开组成不同的局域网aiservice:  # 可为空,即为默认值none
# nginx.conf; 采用neinx搭建文件下载服务器(反向代理);此文件不需要修改
user root;
worker_processes 1;
events {worker_connections 1024;
}
http {server {listen 80;server_name your.domain.com;charset utf-8; # 设置编码格式root /usr/share/nginx/files;location / {autoindex on; # 开启索引功能 !!!最重要 !!!autoindex_exact_size off; # 关闭计算文件确切大小,只显示Mb kb gbautoindex_localtime on; # 显示本机时间而非 GMT 时间}}
}
FROM nvidia/cuda:10.2-cudnn7-devel-ubuntu16.04
# ai.dockerfile
# 构建时连接外网, ARG在docker-compse中build中 必须声名
ARG http_proxy
ARG https_proxy
# 构建时设置阿里源
ARG index_url
ARG trusted_host
# 将一些包下载好,并通过nginx反向代理
ARG resources_url
# 更换apt阿里源
COPY ./sources.list /etc/apt/# ENTRYPOINT [ "executable" ]
RUN bash -xc "rm -rf /etc/apt/sources.list.d"# 安装python依赖,以及一些其它的包
RUN apt-get update && \apt-get install -y make build-essential libssl-dev zlib1g-dev \libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev \liblzma-dev python-openssl libopencv-dev tmux vim && \apt-get cleanRUN bash -xc "curl -O ${resources_url}/Python-3.8.2.tgz && \tar -xzvf Python-3.8.2.tgz && \cd Python-3.8.2 && \./configure && make && make install && \cd .. && rm -rf Python-3.8.2.tgz Python-3.8.2 && \ln -s /usr/local/bin/python3.8 /usr/local/bin/python && \ln -s /usr/local/bin/pip3 /usr/local/bin/pip && \pip install --upgrade pip -i ${index_url} --trusted-host ${trusted_host}"# 安装 python 某些库
RUN bash -xc "pip install -r requirements.txt -i ${index_url} --trusted-host ${trusted_host} && \rm -f requirements.txt && \mkdir /root/.pip/"
# 设置pip阿里源
COPY ./pip.conf /root/.pip/# 更改支持ssh, passwd, 以及需要的一些python库

9. nginx配置踩坑(用 nginx 搭建文件下载服务器)

  1. docker run对应的命令,-it -name 等均可在docker-compose.yml中找到,已经做了注释;
  2. nginx反向代理显示文件列表,通过nginx.conf实现,用于http快速下载安装包,在docker-compose.yml中nginx已经设置好[参考博客]
  3. 所有注意事项均已在docker-compose.yml文件注释,参考 “ai”部分

注:(此处列举重要的点,其它点基本上都在yml文件中注释了)

docker-compose.yml中

  • image镜像若存在,不执行build-dockerfile文件(此处踩坑);

  • image不存在时,执行build搭建镜像;

  • 当dockerfile FROM镜像不存在时,pull拉取镜像;

使用命令【郑重提示:现在不推荐使用apt-get install docker-compose,建议看官网的文档,有3种方法,1种是二进制包,从github release处下载,直接pip安装;另1种是apt-get install docker-compose-plugin的方式,安装docker engine时就安装了这个;再1种是docker desktop;

“官方命令都采用docker compose”,没有“-”,详情看官网文档即可】

  • docker-compose up -d 创建容器(后台运行)

  • docker-compose ps 列举个人创建的容器

  • docker-compose stop 停止容器

  • docker-compose rm 删除所有容器

10. Dockerfile文件构建镜像

linux docker创建容器教程相关推荐

  1. docker 创建容器时指定容器ip

    docker 创建容器时指定容器ip Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定i ...

  2. Docker创建容器时指定IP

    Docker创建容器时指定IP --net extnetwork --ip 172.10.0.2

  3. 【docker创建容器的坑】WSL启动nvidia-docker镜像:报错libnvidia-ml.so.1- file exists- unknown

    可能得错误一: 今天使用docker创建容器的时候总是出错,最后锁定问题在"--gpus all"这里: 不加--gpu all可以运行,加入了--gpus all就出错: doc ...

  4. linux docker 限制容器可用的 cpu

    默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 ...

  5. docker创建容器共享目录

    多个容器可以共享docker宿主机本地的某个目录,会大大提高使用效率.docker提供了一个-v参数,可以很好的解决这个问题. 如下,我们创建两台容器: [root@localhost ~]# doc ...

  6. docker创建容器

    我们可以通过公共仓库拉取镜像使用,但是,有些时候公共仓库拉取的镜像并不符合我们的要求.尽管已经从繁琐的部署工作中解放出来,但是实际开发时,我们可能希望镜像包含整个项目的完成环境,在其他机器上拉取打包完 ...

  7. linux docker 限制容器可用内存

    默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要 ...

  8. linux docker查看容器状态,Docker容器状态命令行工具——Ctop

    Ctop是和Linux top展示效果类似的一个容器状态监视工具,Ctop可以动态的显示容器的cpu.内存.网络的使用情况.一共有两个叫Ctop的命令行工具,分别由GO和Python实现.Python ...

  9. 3.docker创建容器 (docker容器命令)

    文章目录 1.[nginx 容器拉取](https://blog.csdn.net/weixin_43627706/article/details/121990040) 2.运行创建一个nginx容器 ...

最新文章

  1. 2022-2028年中国钢铁智能制造产业竞争现状及发展趋势分析报告
  2. hdu 3068 最长回文(manacheramp;最长回文子串)
  3. 记录一下增加标定评价标准的过程
  4. Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)
  5. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
  6. Mac下显示隐藏文件
  7. springboot ---坑 tomcat部署springboot 一直运行不起来
  8. NativeXml (2):对象建立
  9. Windows YII2安装
  10. [JAVA]字符串单词倒转处理前面的空格
  11. 宇宙无敌大招呼 (5 分)
  12. 2018 中国短视频开发者创意大赛震撼来袭,万元现金大奖邀你来战!
  13. 关于文件、文件夹加密隐藏原理的一点想法
  14. git checkout -b
  15. [HNOI2019]鱼
  16. 在 Kubernetes 集群中使用 MetalLB 作为 LoadBalancer(下)- BGP
  17. Linux vi的剪切,复制和粘贴
  18. 深度学习故障诊断之-使用条件生成对抗网络CGAN生成泵流量信号
  19. web开发第三方登陆之google+登陆
  20. 静态库和动态库的制作使用与区别

热门文章

  1. Linux常用命令大全集
  2. realme q2和realme q2pro的区别
  3. 第2章第23节:文字对齐:借助分布功能实现倾斜对齐 [PowerPoint精美幻灯片实战教程]
  4. 【Python 基础篇】Python代码 之 缩进规则
  5. IDEA下使用gerrit项目指南
  6. Spire.Office.NET Crack,提供免费的高质量组件
  7. Javac 不是内部或外部命令
  8. 二叉树的层序创建和层序遍历(c++,c)
  9. java 对json 格式做参数格式校验
  10. 125KHZ|134.2KHZ低频RFID玻璃管标签读写器编码器支持各类标签类型说明