docker入门(安装,常用功能使用整理)

由于不同的project需要不同版本的环境,比如一个要opencv3, 一个opencv4, 都安装在主机上会很混乱,所以用docker来创建不同的环境。

现在想用的docker功能:
安装
创建一个ubuntu环境
在ubuntu环境中如何安装软件
怎么把安装好软件的环境保存下来,并上传到docker hub, 方便在其他机器上使用,或者系统崩了之后复原
如何一个容器开启多个终端
如何借用主机的显示屏显示docker中的图形化界面

现在一项一项来:
安装
参照官网:https://docs.docker.com/engine/install/ubuntu/
这篇文章讲得比较详细:https://kalacloud.com/blog/how-to-install-and-use-docker-on-ubuntu/
为了方便设置,再装一个docker-desktop:
https://docs.docker.com/desktop/linux/install/
这个直接下载deb文件,双击文件夹安装即可(用dpkg -i我这里会报缺少依赖错误)

docker安装好后,每次使用docker命令前面都要加上sudo, 很是麻烦,
这时可添加自己的用户名进去,比如我的用户名是new_usr
那么sudo usermod -aG docker new_usr
再用一个su - new_usr,下次就不需要sudo了

创建一个ubuntu环境
我们可以拿来主义,直接用别人已经搭好的ubuntu环境
先看看都有什么ubuntu环境
我这里想用一个带opencv3版本的,
所以搜索opencv3

$ docker search opencv3
NAME                                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
harshjv/opencv3                               Dockerized OpenCV3 with Python support, Open…   4                    [OK]
wlads/opencv3-contrib-python                  OpenCV 3.1.0 with Contrib and Python support…   2                    
tanmaniac/opencv3-cudagl                      Docker container with CUDA 9, OpenGL, and Op…   2                    [OK]
varunagrawal/opencv3                          Ubuntu 16.04 + OpenCV3 + Python3                2                    
stevenli1119/opencv3.4.12_cuda11.0_cudnn8.0   opencv3.4.12_cuda11.0_cudnn8.0                  1                    
evoup/opencv3.3.0                             opencv3.3.0 with python2.7 over ubuntu16.04     1                    [OK]
lalala/opencv3                                                                                1                    [OK]

带[OK]的是官方的,我这里选evoup/opencv3.3.0
所以把它拉到本地

docker pull evoup/opencv3.3.0

通过$ docker images可以看到这个image已经被拉下来了。

注意拉下来的是image(镜像),而我们run一个这样的镜像就是container(容器),一个镜像可以run多个容器。

在ubuntu环境中如何安装软件
和正常ubuntu系统里安装软件一样。
换源方法:

sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt-get clean
apt-get update

保存安装好的环境,上传到docker hub, 方便系统崩了以后复原

参考:https://kalacloud.com/blog/how-to-install-and-use-docker-on-ubuntu/

docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

commit之后可以看到新生成的image, 假设ubuntu-ros是新的镜像

要推送镜像,请首先登录 Docker Hub。没有用户名的要先注册一个。

docker login -u docker-registry-username

输入账号对应的密码后,即可登录成功。

Login Succeeded
注意:如果你在 Docker 注册用户名与用于创建镜像的本地用户名不同,要在备注中记录 Docker 用户名:

docker tag kalacloud/ubuntu-nodejs kalacloud/ubuntu-nodejs

然后,我们就可以推送镜像到 Docker hub 上了,命令如下:

docker push docker-registry-username/docker-image-name

如果我们要把ubuntu-nodejs镜像推送到kalacloud的版本库,命令如下:

docker push kalacloud/ubuntu-nodejs

可以打开docker-desktop看到上传的image

如何一个容器打开多个终端
像ros这种,在一个终端输入了roscore之后,要再打开其他终端才能运行node, 或者想开多个终端进行调试。
如果用docker run, 就会打开一个新的容器,涉及到容器间的通信问题,
如果想进同一个容器,要用docker exec

可通过docker ps查看当前容器的id, 假设这里container id是7896ef8f403f

docker exec -it 7896ef8f403f /bin/bash

如何借用主机的显示屏显示docker中的图形化界面
docker相当于一个没有显示屏的电脑,那么如何共享主机的画面来显示docker中的图形化界面呢,
比如显示ros中的小海龟。
参考:https://blog.youkuaiyun.com/qq_29935433/article/details/106194487?utm_source=app&app_version=5.5.0
只是需要注意一点,血泪的教训,
在主机上做了下面这一步之后,

#允许所有用户,包括docker,访问X11 的显示接口
sudo apt-get install x11-xserver-utils
xhost +
#输出为:access control disabled, clients can connect from any host

一定要新开一个终端打开docker,如果用之前已经打开的终端,环境的配置反映不过去,会出现could not connect to display :0的错误。

docker run -it --net=host -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=$DISPLAY --env="QT_X11_NO_MITSHM=1" 

如果报无法打开/tmp/.X11-unix,需要配置file shared的错误,
打开docker-desktop, 点右上角的setting符号,选Resource->File sharing, 然后把/tmp文件夹加进去。

再打开docker,运行rqt, rviz等,就能显示了。

共享USB
比如我要用一个usb摄像头,连到docker里面的程序,
程序启动时会提示报错,找不到/dev/video这个设备,
这时需要在docker run命令后面加一个选项

--device="/dev/video0"

同时还要加上--privileged,不然会没有访问摄像头的权限

docker与宿主机间的文件拷贝

宿主机的文件copy到docker:

docker cp <本地文件名> <container id>:<docker中的路径/文件名>

docker中的文件copy到宿主机:

docker cp <container id>:<docker中的路径/文件名> <本地文件名>
<think>嗯,用户想了解Docker入门教学。我需要先回想一下Docker的基本概念,然后整理出一个适合初学者的教学结构。首先,Docker是什么?它是一个容器化平台,允许开发者打包应用及其依赖项到容器中,便于在不同环境中运行。接下来,应该包括安装、基本命令、使用场景等内容。 用户可能是刚开始接触Docker的开发者或者系统管理员,他们可能想快速上手,所以在回答中需要简明扼要,步骤清晰。可能还需要解释一些术语,比如镜像、容器、仓库,避免使用过于专业的术语,或者至少先定义它们。 然后,我需要考虑用户可能的需求层次。入门教学可能需要包括安装步骤、常用命令示例,以及一个简单的实战例子,比如运行一个Nginx容器。此外,可能还需要解释Dockerfile的作用,因为这是构建自定义镜像的关键。 另外,用户可能对Docker的优势和为什么使用容器技术感兴趣,所以需要简要比较虚拟机与容器的区别,突出Docker的轻量级和高效性。 还要注意常见的误区,比如容器与虚拟机的混淆,数据持久化的问题,或者网络配置的基础知识。不过作为入门,可能不需要深入这些细节,但可以提到这些概念供进一步学习。 最后,结构应该逻辑清晰,分步骤讲解,每个部分有小标题,代码示例用正确的格式显示,比如使用代码块或者LaTeX的语法。不过根据系统指令,独立公式需要用$$...$$,但这里可能更多是代码块,需要确认用户是否接受代码块的格式。 总结一下,教学大纲可能包括:Docker简介、安装步骤、核心概念(镜像、容器、仓库)、基本命令(pull, run, ps, stop, rm)、Dockerfile示例、实战案例、常见问题。确保语言口语化,避免冗长,重点放在操作步骤和示例上,让用户能跟着做。</think>以下是一份适合新手的Docker入门指南,采用渐进式学习路径: ### 一、Docker核心概念 1. **容器**:轻量化的软件运行单元(类似手机APP,自带运行环境) - 对比虚拟机:$$ \text{虚拟机} \approx \text{房子} \quad \text{容器} \approx \text{帐篷} $$ - 优势:启动快(秒级)、资源占用少、环境一致性高 2. **镜像(Image)**:包含应用程序及其依赖的只读模板 - 分层存储结构(类似千层蛋糕,每层可复用) - 常用镜像:`nginx`, `mysql`, `python:3.9` 3. **仓库(Registry)**:镜像存储中心 - 官方仓库:Docker Hub(https://hub.docker.com) - 私有仓库:Harbor、Nexus等 ### 二、环境准备(Windows/Mac) 1. 安装Docker Desktop ```bash # 验证安装 docker --version docker run hello-world ``` > 出现"Hello from Docker!"表示安装成功 2. 配置镜像加速(解决国内拉取镜像慢的问题) - 阿里云镜像加速器:登录阿里云控制台获取加速地址 ### 三、基础命令速查 | 命令 | 作用 | 示例 | |------|------|------| | `docker pull` | 下载镜像 | `docker pull nginx:alpine` | | `docker run` | 启动容器 | `docker run -d -p 80:80 nginx` | | `docker ps` | 查看容器 | `docker ps -a`(显示所有容器) | | `docker exec` | 进入容器 | `docker exec -it [容器ID] /bin/bash` | | `docker stop` | 停止容器 | `docker stop [容器ID]` | | `docker rm` | 删除容器 | `docker rm [容器ID]` | ### 四、实战演练:部署Web应用 1. 启动Nginx服务器 ```bash docker run -d --name my_web -p 8080:80 nginx ``` - 浏览器访问:http://localhost:8080 2. 修改默认页面 ```bash # 进入容器 docker exec -it my_web /bin/bash # 修改HTML文件 echo "<h1>Hello Docker!</h1>" > /usr/share/nginx/html/index.html ``` 3. 制作自定义镜像(Dockerfile) ```dockerfile FROM nginx:alpine COPY custom.html /usr/share/nginx/html/index.html ``` 构建命令: ```bash docker build -t my_nginx . ``` ### 五、进阶技巧 1. 数据持久化:使用`-v`参数挂载卷 ```bash docker run -v /host/path:/container/path mysql ``` 2. 容器互联:`--link`参数或自定义网络 ```bash docker network create my_net docker run --network=my_net --name app my_app ``` 3. 常用工具推荐: - 可视化工具:Portainer - 编排工具:Docker Compose - 镜像扫描:Trivy ### 六、学习资源推荐 1. 官方文档:https://docs.docker.com 2. 交互式教程:https://labs.play-with-docker.com 3. 书籍:《Docker——容器容器云(第2版)》 > **避坑指南**:首次使用建议分配4GB+内存,Linux系统需关闭SELinux,Windows系统需开启WSL2支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值