【docker学习】docker的使用记录

Docker 是一个开源的应用容器引擎。

Docker包含三部分,分别是:镜像image,容器container,仓库repository

镜像和容器的关系,就相当于面向对象中的类和对象的关系,镜像是静态的定义,而容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

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

一、安装docker(windows)

链接:https://pan.baidu.com/s/1D6oyu7NgoHGGUrKaUcBRBw 
提取码:sf72 

自行下载安装,默认安装即可~

二、打开dockerhub

Docker Hub

dockerhub就有点像github一样,各种各样的仓库镜像,搜索Ubuntu

 选择合适的版本

在这里我选着Ubuntu20.04为例

三、查看当前有哪些镜像

docker images

我们可以看到现在本地没有镜像

四、拉取Ubuntu20.04镜像

docker pull ubuntu:20.04

这样就下载完啦~ 

 我们再次查看本地镜像,多了Ubuntu20.04这个

 五、使用Ubuntu镜像启动一个容器

docker run --name="ros_noetic" -it 825d55fb6340 /bin/bash

 --name:为容器命名(因为我是用来装ros_noetic版本的)

-it:使用交互方式运行(-i:交互式操作,-t终端)

/bin/bash:表示交互式 Shell(我们可以看到运行结束,下面变成命令行窗口)

 这时候我们的容器就创建完成了~

 我们发现我们创建完它就直接运行了,以后重新登录的时候,只需要以下两步即可~

docker start 容器id

docker exec -it 4134c3bea12a /bin/bash

 

 这样就可以开始Ubuntu的操作啦~~~

六、其他命令操作

1、查看所有的容器

docker ps -a

 2、删除容器

docker rm -f 容器id

3、删除镜像

docker rmi -f 镜像id

以下内容为新增内容!


Docker更换下载源:

(直接飞一般的感觉)

cd /etc/docker
sudo vim daemon.json

在daemon.json中添加:

{
  "registry-mirrors": [
          "https://hub-mirror.c.163.com",
          "https://mirror.baidubce.com",
          "https://docker.mirrors.ustc.edu.cn"

  ]
}
重启生效:
sudo systemctl daemon-reload
sudo systemctl restart docker

看是否生效:

sudo docker info


新增:

vscode没法找到docker 容器,原因是docker需要管理员权限,

因此会出现 docker ps -a 查看不了容器,而sudo docker ps -a 却可以查看,

解决方法:

sudo groupadd docker          #添加docker用户组
sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组

再重启下电脑reboot,进入vscode就可以查看docker容器,从而进行远程控制

注意:vscode需要下载Dev Containers 插件!


新增:

如何将本地文件复制到docker容器内:

docker cp 本地文件路径 容器ID/容器NAME:容器内路径

新增:

卸载docker:

sudo apt-get remove docker \
               docker-engine \
               docker.io

Docker服务相关命令:

1、启动docker服务

systemctl start docker

2、停止docker服务

systemctl stop docker

3、重启docker服务 

systemctl restart docker

4、查看docker服务状态

systemctl status docker

5、设置开机启动docker服务

systemctl enable docker

Docker镜像相关命令:

1、查看镜像(查看所有镜像)

docker images

2、查看所有镜像id

docker images -q

3、搜索镜像

docker search 镜像名称

4、拉取镜像(从Docker仓库下载镜像到本地,镜像名称的格式为 名称:版本号,若没有指定版本号,则下载最新版本)

docker pull 镜像名称

5、删除镜像

docker rmi 镜像id

6、删除所有镜像

docker rmi 'docker images -q'

Docker容器相关命令:

1、查看容器

(查看正在运行的容器)

docker ps 

(查看所有容器)

docker ps -a

2、创建并启动容器

docker run 参数

参数说明:

  • -i:保持容器运行。通常和-t同时使用,加入-it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
  • -t:为容器重新分配一个输入终端,通常与-i同时使用
  • -d:以后台模式运行容器,需要使用docker exec 进入容器,退出后,容器不会关闭
  • --name:为创建的容器命名

 例如:

docker run --name="a1" -it ubuntu:20.04 /bin/bash

3、进入容器

docker exec 参数

例如:

docker exec -it a1 /bin/bash

a1 为容器名称

4、启动容器

docker start 容器名称

5、停止容器

docker stop 容器名称

6、删除容器(注:运行状态下的容器是不能删除的,只有停止容器后才能删除)

docker rm 容器名称

7、查看容器的信息

docker inspect 容器名称

Docker容器的数据卷

数据卷:

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

作用:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

 创建启动容器时,使用 -v 参数 ,设置数据卷

docker run …… -v 宿主机目录/文件:容器内目录/文件

注:

  1. 目录必须是绝对路径
  2. 如果目录不存在,则会自动创建
  3. 可以挂载多个数据卷

例如:

docker run -it --name=c1 -v /root/data:/root/data_container ubuntu:20.04 /bin/bash

数据卷容器:

多容器进行数据交换:

  1. 多个容器挂载在同一个数据卷
  2. 数据卷容器

 1、创建启动c3数据卷容器,使用-v 参数 设置数据卷

docker run -it --name=c3 -v /volume ubuntu:20.04 /bin/bash

2、创建启动c1 c2 容器,使用-volume-from 参数 设置数据卷

docker run -it --name=c1 -v --volume-from c3 ubuntu:20.04 /bin/bash
docker run -it --name=c2 -v --volume-from c3 ubuntu:20.04 /bin/bash

Docker 镜像制作

1、容器转为镜像

docker commit 容器id 自定义镜像名称:版本号

例如:

docker commit 4134c3bea12ad my_images:1.0

压缩镜像:(进行传输)

docker save -o 压缩文件名称 镜像名称:版本号

例如:

docker save -o my_zip_file.tar my_images:1.0

解压缩加载镜像

docker load -i 压缩文件名称

例如:

docker load -i my_zip_file.tar

2、Dockerfile 

关键字作用备注
FROM指定父镜像指定dockerfile基于哪个image构建
MAINTAINER作者信息用来标明这个dockerfile是谁写的
LABEL标签

用来表明dockerfile的标签,可以使用LABEL代替MAINTAINER,最终可以在docker image基本信息中查看

RUN执行命令格式:RUN command 或者 RUN ["command","param1","param2"]
CMD容器启动命令格式:CMD command param1 param2 或者 CMD ["command","param1","param2"]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中,不仅仅局限于当前build上下文,也可以来源于远程服务
ENV环境变量指定build的时候的环境变量,也可以在启动容器的时候,通过-e ,格式:ENV name=value

docker build -f dockerfile文件路径 -t 自定义镜像名称:版本 .

例如:

需求:

        自定义Ubuntu20.04镜像:1、默认登录路径为/usr  2、可以使用vim

步骤:

  1. 定义父镜像:FROM Ubuntu:20.04
  2. 定义作者信息:MAINTAINER qsx <qsx@hh.cn>
  3. 执行安装vim命令:RUN apt install -y vim
  4. 定义默认的工作目录:WORKDIR /usr
  5. 定义容器启动执行的命令:CMD /bin/bash

dockerfile文件:

FROM Ubuntu:20.04
MAINTAINER qsx <qsx@hh.cn>

RUN apt install -y vim
WORKDIR /usr

CMD /bin/bash

构建dockerfile文件:

docker build -f ./dockerfile -t my_images:1.0 .

Docker 私有仓库

一、构建私有仓库

1、拉取私有仓库镜像

docker pull registry

2、启动私有仓库容器

docker run -id --name=registry -p 5000:5000 registry

3、打开浏览器,输入地址http://私有仓库服务器ip:5000

4、修改daemon.json

vim /etc/docker/daemon.json

在上述文件中添加一个key,保存并退出

{"insecure-registries":["私有仓库服务器ip:5000"]}

5、重启docker服务

systemctl restart docker
docker start registry

二、将镜像上传至私有仓库

1、标记镜像为私有仓库的镜像

docker tag my_image:1.0 私有仓库服务器ip:5000/my_image:1.0

2、上传标记的镜像

docker push 私有仓库服务器ip:5000/my_image:1.0

三、从私有仓库拉取镜像

docker pull 私有仓库服务器ip:5000/my_image:1.0

新增:

由于docker只针对在CPU上面跑的情况,对于需要在GPU上面运行的服务器,其提供了一个nvidia-docker

安装nvidia-docker2

sudo apt-get install -y nvidia-docker2

验证:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi

若出现

docker: Error response from daemon: Unknown runtime specified nvidia.

则检查一下daemon.json文件,添加以下内容

{
  "registry-mirrors": [
          "https://610597w4.mirror.aliyuncs.com",
          "https://hub-mirror.c.163.com",
          "https://mirror.baidubce.com",
          "https://docker.mirrors.ustc.edu.cn"

  ],
   "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

 

重启生效:
sudo systemctl daemon-reload
sudo systemctl restart docker

就可以验证运行了!

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值