ubuntu20从docker安装到制作自己的镜像使用记录
第一章:配置环境
1.ubuntu20
2.docker镜像18.04
3.参考:https://www.runoob.com/docker/docker-tutorial.html
第二章:安装docker
一、安装docker
参考1:Ubuntu安装docker并运行测试【docker默认最新,虚拟机版本22.04】
目前docker的几个大的国内镜像站都嘎了,需要配置镜像文件。镜像网址参考:docker镜像加速源配置,目前可用镜像源列举
1.安装教程
python
Step1:更新系统软件包
sudo apt update
Step2:安装依赖包【用于通过HTTPS来获取仓库】
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Step3:添加Docker官方GPG密钥
sudo -i
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce.gpg
Step4:验证
sudo apt-key fingerprint 0EBFCD88
0EBFCD88 是公钥的指纹。执行这个命令后,系统会显示与该指纹相关的公钥信息。
Step4:添加Docker阿里稳定版软件源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
Step5:再次更新软件包
sudo apt update
Step6:安装默认最新版
sudo apt install docker-ce docker-ce-cli containerd.io
Step7:测试,安装好后默认启动
sudo docker run hello-world
如果输出"Hello from Docker!"则表示Docker已经成功安装。
Step8:查看有哪些镜像
sudo docker images
Step9:配置用户组
sudo usermod -aG docker galaxfy
su - galaxfy # 刷新shell状态
docker images # 验证
Step10:其他docker运行命令
查看状态:sudo systemctl status docker
启动:sudo systemctl start docker
开机自启:sudo systemctl enable docker
停止:sudo systemctl stop docker
其他:安装特定版docker
sudo apt-cache madison docker-ce # 显示可用版本
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io # 将需要的版本替换VERSION_STRING进行安装,例如 5:20.10.17~3-0~ubuntu-focal
2.镜像网址配置
在pull拉取镜像时,如果拉不到文件,可以尝试修改daemon.json文件
依次输入如下指令:
python
sudo nano /etc/docker/daemon.json
写入:
python
{
"registry-mirrors": [ "https://docker.registry.cyou",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
使用的是 nano,可以通过按 Ctrl + O 保存文件,然后按 Enter 确认文件名,最后按 Ctrl + X 退出编辑器。
输入:
python
sudo systemctl daemon-reload
sudo systemctl restart docker
二、验证
终端输入:
python
sudo docker run hello-world
出现:
python
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:63421b18c1443a9a85139225293fae7541fb40b7832d9deff80b6a9a75ce3604
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
表示安装成功。
第三章:docker的使用
一、hello world
开始学习的第一步,必然是"hello world"!
终端输入:
python
sudo docker run ubuntu:18.04 /bin/echo "Hello world"
会报错。
应该是权限问题,增加sudo即可。
python
sudo docker run ubuntu:18.04 /bin/echo "Hello world"
输出:
各个参数解析:
- docker: Docker 的二进制执行文件。
- run: 与前面的 docker 组合来运行一个容器。
- ubuntu:18.04 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu18.04镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
二、运行交互式的容器
这句话有点拗口,个人理解就是和docker中的容器进行交互。
输入指令:
python
sudo su
sudo docker run -i -t ubuntu:18.04 /bin/bash
出现root@3ba0a1b6cfce:字样
表示目前已经进入了新建的ubuntu18.04的docker中了。
再输入指令:
python
cat /proc/version
ls
可以看到新建的容器中该文件夹下的目录。
输入指令退出该容器,回到本机环境。
python
exit
三、启动容器
创建一个以进程方式运行的容器
python
sudo docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
意思是创建一个容器,每秒刷一次hello world,出现
确认容器有在运行,可以通过 docker ps 来查看,输入:
python
sudo docker ps
输出
1.CONTAINER ID为容器的ID
2.IMAGE:容器的镜像
3.COMMAND:执行的命令
查看容器内的标准输出
输入
python
sudo docker logs ec3075c464ece03d
ec3075c464ece03d:为当前容器的ID,截取前面一部分就行。
停止当前容器
输入:
python
sudo docker stop ec3075c464ece03d
使用命令查看
python
sudo docker ps
第四章、构建镜像
这一节目标是在第三节拉取的ubuntu18.04中构建python环境,以及运行一个代码示例。
一、确认基础镜像
终端输入:
python
sudo docker images
后面将使用ubuntu18.04做为基础镜像,如果没有的话,可以使用如下指令进行pull:
python
sudo docker pull ubuntu:18.04
二、构建自己的镜像
1.dockerfile文件编写
为了构建一个带有python3的镜像,编写dockerfile文件如下:
cpp
# Dockerfile
# Base images 基础镜像
FROM ubuntu:18.04
# MAINTAINER 维护者信息
maintainer chenjun_1241370589@qq.com
# 设置超时
ENV PIP_DEFAULT_TIMEOUT=100
#RUN 执行以下命令
RUN apt update
RUN apt install python3 python3-pip -y
RUN pip3 install --upgrade pip setuptools
RUN pip3 cache purge
RUN pip3 install opencv-python==4.5.5.62 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 OpenCV
RUN apt-get update && apt-get install -y \
libgl1-mesa-glx # 安装 OpenGL 库
# 其他依赖和设置
RUN pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN apt install libgl1-mesa-glx
RUN mkdir -p /data/code/
#拷贝文件至工作文件夹
COPY test.py /data/code/test.py
#工作目录
WORKDIR /data/code/
#容器启动时执行的命令
CMD ["python3","test.py"]
2.编写测试文件
在dockerfile同级文件夹下,编写test.py文件,test.py文件中写入:
python
import numpy as np
import cv2
print("Useing Opencv")
# 创建一个200x200的黑色图像,默认数据类型是uint8,范围是0-255
# 这里使用0作为颜色值,表示黑色
blank_image = np.zeros((200, 200, 3), dtype="uint8")
print("blank_image",blank_image)
3.构建指令
在dockerfile文件夹下,开启终端,输入如下指令
python
sudo docker build -t cj-python3:v2.0 . -f Dockerfile
接下来docker将会按照dockerfile中的内容进行构建。
等待构建完成。
4.测试
输入指令:
python
sudo docker run -i -t cj-python3:v2.0
将会输出:
输入指令:
python
sudo docker run -i -t cj-python3:v2.0 /bin/bash
cd到工作文件夹下(data/code/),输入指令:
python
ls
可以查看到工作文件夹下的文件情况
输入"exit"即可退出当前镜像。
5.删除镜像
删除镜像指令:
python
docker rmi <镜像ID或名称>
强制删除镜像指令:
python
docker rmi -f <镜像ID或名称>