ubuntu环境下docker容器详细安装使用
文章目录
- 一、简介
- 二、ubuntu安装docker
- 1.删除旧版本
- 2.安装方法一
- 3. 安装方法二(推荐使用)
- 4.运行Docker容器
- 5. 配置docker加速器
- 三、Docker镜像操作
- 1. 拉取镜像
- 2. 查看本地镜像
- 3. 删除镜像
- 4. 镜像打标签
- 5. Dockerfile生成镜像
- 四、Docker容器操作
- 1. 获取镜像
- 2. 启动容器
- 3. 退出
- 4. 查看所有的容器
- 5. 启动已停止运行的容器
- 6. 停止一个容器
- 7. 重启容器
- 8.进入容器
- 9. 导入导出容器
- 10. 删除容器
- 11. 查看容器端口的映射
- 12. 查看容器的日志
- 13. 一次性删除所有的运行容器
- 14. 查看容器的信息
- 五、Docker容器测试
- 1.使用中科大镜像加速器
- 2.把 Docker 配置为普通用户访问
- 3.拉取ubuntu18.04镜像
- 4.运行镜像进入容器
- 5. Docker安装常用工具
- 6. 添加用户
- 7. docker 文件的拷贝
- 8. 安装ssh远程连接
一、简介
- ubuntu下使用docker为了解决不同厂家的核板需要搭建不通的虚拟机交叉编译环境,使用docker就可以在一个虚拟机中完成多个核板的程序开发
- 本文记录自己的安装过程以及
Docker命令的使用记录

二、ubuntu安装docker
1.删除旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
2.安装方法一
使用官方安装脚本安装
curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh

3. 安装方法二(推荐使用)
- 更新 apt 包索引,输入以下命令:
sudo apt-get update - 安装 apt 依赖包,用于通过 HTTPS 来获取仓库,输入以下命令
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common - 添加 Docker 的官方 GPG 密钥,输入以下命令:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - - 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后 8 个字符,验证现在是否拥有带有指纹的密钥,输入以下命令:
sudo apt-key fingerprint 0EBFCD88 - 使用以下指令设置稳定版仓库
sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \ $(lsb_release -cs) \ stable" - 安装 Docker Engine-Community
sudo apt-get update - 安装最新版本的 Docker Engine-Community 和 containerd,输入以下命令
sudo apt-get install docker-ce docker-ce-cli containerd.io
4.运行Docker容器
- 启动docker服务
service docker start - 列出docker现有镜像
docker images - 配置docker服务开机自启
systemctl enable docker
5. 配置docker加速器
中科大镜像加速器
https://docker.mirrors.ustc.edu.cn
执行下面命令
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、Docker镜像操作
1. 拉取镜像
docker image pull 镜像名称
拉取最新版的 Ubuntu 镜像
docker pull ubuntu
docker pull ubuntu:latest
2. 查看本地镜像
docker images

3. 删除镜像
docker image rm 镜像名或镜像id
4. 镜像打标签
docker tag <镜像ID或名称> <新标签名>
5. Dockerfile生成镜像
生成一个dockerfile文件
vim dockerfile
################################################
#
#生成SSH服务的ubuntu镜像
#
#################################################基于哪个镜像生成新的镜像
FROM ubuntu:20.04#作者名
MAINTAINER oldzhai#设置环境变量
ENV TZ Asia/Shanghai
ENV LANG zh_CN.UTF-8#执行命令
#替换为阿里源
RUN sed -i 's#http://archive.ubuntu.com/#http://mirrors.aliyun.com/#' /etc/apt/sources.list \&& sed -i 's#http://security.ubuntu.com/#http://mirrors.aliyun.com/#' /etc/apt/sources.list#更新软件源并安装软件
#安装ssh服务
RUN apt-get update -y \&& apt-get -y install iputils-ping \&& apt-get -y install wget \&& apt-get -y install net-tools \&& apt-get -y install vim \&& apt-get -y install openssh-server \&& apt-get clean && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp/*#设置密码
RUN echo 'root:root' |chpasswd#允许root用户登入
RUN sed -ri 's/^#PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config#创建sshd目录
RUN mkdir /var/run/sshd# 声明端口
EXPOSE 22#开始ssh服务
CMD ["/usr/sbin/sshd", "-D"]
使用当前目录的 Dockerfile 创建镜像,标签为 ubuntu_ssh:20.04
注:后面的 .表示当前目录
使用docker images命令可以查看当前已有镜像
docker build -t ubuntu_ssh:20.04 .


四、Docker容器操作
1. 获取镜像
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
docker pull ubuntu
2. 启动容器
docker run -it ubuntu /bin/bash//-v指定共享目录
docker run -itd --name ubuntu01 -v /root/test:/root ubuntu//-p指定端口号 宿主机8088 容器内部是80
docker run -itd --name ubuntu01 -v /root/test:/root -p 8088:80 ubuntu
docker run -itd --name ubuntu01 -v /root/test:/root -p 127.0.0.1:8088:80 ubuntu//-v 共享目录 将当前目录挂载到容器的/data
//-p 端口
docker run -v $(pwd):/data -p 1022:22 --hostname ubuntu01 --privileged -it --rm ubuntu:18.04 /bin/bash
3. 退出
exit
4. 查看所有的容器
docker ps -a
5. 启动已停止运行的容器
//使用 docker start 启动一个已停止的容器
docker start b750bbbcfd88 //后台运行在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式
docker run -itd --name ubuntu-test ubuntu /bin/bash
6. 停止一个容器
docker stop <容器 ID>
7. 重启容器
停止的容器可以通过 docker restart 重启
docker restart <容器 ID>
8.进入容器
如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因
docker exec -it 243c32535da7 /bin/bash
如果从这个容器退出,会导致容器的停止
docker attach 1e560fca3906
9. 导入导出容器
这种方式主要用于分享或迁移整个镜像,包括所有版本、标签和历史
导出:
docker save -o <保存路径>/myimage.tar myimage:latest
导入:
docker load -i <路径>/myimage.tar
这种方式主要用于分享或迁移容器的当前状态。这不包括容器的历史或元数据,如环境变量,所以它常常用于对容器进行快照
导出:
docker export <容器ID> > mycontainer.tar
导入:
docker import mycontainer.tar
10. 删除容器
删除容器使用 docker rm 命令:
docker rm -f 1e560fca3906
下面的命令可以清理掉所有处于终止状态的容器
docker container prune
11. 查看容器端口的映射
//bf08b7f2cd89 为容器的id
docker port bf08b7f2cd89
12. 查看容器的日志
docker logs -f bf08b7f2cd89
13. 一次性删除所有的运行容器
docker rm -f `docker ps -a -q`
14. 查看容器的信息
docker inspect 730fde4da6ac
//过滤只查询ip信息
docker inspect --format='{{.NetworkSettings.IPAddress}}' 730fde4da6ac

五、Docker容器测试
1.使用中科大镜像加速器
上面设置了,可以直接跳过
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
重启 docker 服务
sudo systemctl restart docker
2.把 Docker 配置为普通用户访问
//添加 docker 用户组,输入以下命令
sudo groupadd docker//将登陆用户加入到 docker 用户组中
sudo usermod -aG docker $USER//更新用户组(这一步非常重要)
newgrp docker//重启 docker 服务
sudo systemctl enable docker
sudo systemctl restart docker
3.拉取ubuntu18.04镜像
sudo apt update
docker pull ubuntu:18.04
4.运行镜像进入容器
docker container run -p 8000:3000 -it ubuntu:18.04 /bin/bash
-p 参数:容器的 3000 端口映射到本机的 8000 端口。
-it 参数:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传
入容器。
ubuntu:18.04:image 文件的名字
/bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使
用 Shell。
5. Docker安装常用工具
apt update
apt install byobu vim-gtk inetutils-ping net-tools wget cpio unzip rsync xz-utils bc time

过程中需要配置地区,选择亚洲上海:


6. 添加用户
设置超级用户
apt install sudo
添加普通用户
visudo
添加自己的用户名,保存并退出
oldzhai ALL=(ALL:ALL) ALL

adduser oldzhai

切换到普通用户
su oldzhai

7. docker 文件的拷贝
//docker cp 主机的目录文件 容器运行id:容器路径
docker cp /home/topeet/topeet-qt5.14.2/ bc1d9b59bc0b:/home/topeet/project///容器文件 拷贝到虚拟机
docker cp bc1d9b59bc0b:/home/topeet/project/ /home/topeet/topeet-qt5.14.2/
8. 安装ssh远程连接
行容器指定端口
-p 参数:容器的 22 端口映射到本机的 10022 端口
docker run -v $(pwd):/data -p 1022:22 --hostname ubuntu01 --privileged -it --rm ubuntu:18.04 /bin/bash
安装ssh
apt update
apt-get install ssh

相关文章:
ubuntu环境下docker容器详细安装使用
文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二(推荐使用)4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…...
vue2源码分析-vue入口文件global-api分析
文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…...
Javascript原型 ,原型链如何理解使用 ?有什么特点?
文章目录 图解原型原型链总结有需要的请私信博主,还请麻烦给个关注,博主不定期更新,或许能够有所帮助!!请关注公众号 图解 原型 常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性…...
Flutter混合栈管理方案对比
1.Google官方(多引擎方案) Google官方建议的方式是多引擎方案,即每次使用一个新的FlutterEngine来渲染Widget树,存在的主要问题是每个引擎都要有比较大的内存等资源消耗,虽然Flutter 2.0之后的FlutterEngineGroup通过在…...
Asp .Net Core 集成 Newtonsoft.Json
简介 Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用,因为它功能强大、易于使用,并且有良好的性能。 使用Newtonsoft.Json,…...
GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?
目录 1,问: 1,答: 2,问: 2,答: Cortex-A系列 Cortex-R系列 Cortex-M系列 3,问: 3,答: ARM Cortex-A架构 ARM Cortex-R架构…...
795. 前缀和(acwing)
文章目录 795.前缀和题目描述前缀和 795.前缀和 题目描述 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&a…...
1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数
1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数,通过汇编来实现的。注释部分以及结合后面的讲解部分,可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…...
图论练习5
Going Home Here 解题思路 模板 二分图最优匹配,前提是有完美匹配(即存在一一配对)左右集合分别有顶标,当时,为有效边,即选中初始对于左集合每个点,选择其连边中最优的,然后对于每…...
[C++] Volatile 和常量Const优化
Volatile的作用 volatile 表明某个变量的值可能在外部被改变,因此对这些变量的存取不能缓存到寄存器,每次使用时需要重新存取。 Const 和 Volatile的示例 示例1 int main() {const int a 1;int* pa const_cast<int*>(&a);*pa 4;cout &l…...
嵌入式学习day32 网络
htons();//host to network short 将端口号转换为网络通信中的大端存储 eg:htons(50000); ntohs();//host to network short 将大端存储转换为主机端口号 inet_addr();将IP地址转换为二进制 eg:inet_addr(192.168.1.170); inet_ntoa()…...
算法D33 | 贪心算法3 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
1005.K次取反后最大化的数组和 本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。 代码随想录 Python: class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(keylambda x: abs(x), reverseT…...
html地铁跑酷
下面是一个简单的HTML代码来展示一个地铁跑酷游戏: <!DOCTYPE html> <html> <head><title>地铁跑酷</title><style>#player {position: absolute;top: 0;left: 0;width: 50px;height: 50px;background-color: red;}</style…...
利用GPT开发应用001:GPT基础知识及LLM发展
文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下,您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子?您可以创建哪些应用程序?这正是OpenAI正在助力构建的世界&#x…...
Golang Ants 构建协程池
构建的协程池实现两个目标: 1、限制协程池里开启的协程数量 2、当任务数大于协程数时,一个协程可以同时处理多个任务 3、监控是哪个协程ID处理了具体的任务 package mainimport ("fmt""runtime""strconv""string…...
【金三银四】面试题汇总(持续编写中)
Java八股文面试题汇总(持续编写中~) Java基础集合JUCJVM 数据库MySQLRedis 框架篇SSMSpringBoot 数据结构与算法数据结构与算法--汇总篇27道基础算法题,学完让你对算法有豁然开朗的感觉(推荐小白) 消息中间件RabbitMQK…...
Hive的数据存储
Hive的数据存储在HDFS的:/user/hive/warehouse中 The /user folder in HDFS is a directory typically used to store user-specific data and configurations. It serves as the home directory for Hadoop users, analogous to the /home directory in Unix-like …...
ORACLE 如何使用dblink实现跨库访问
dbLink是简称,全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。在创建dat…...
Sentinel 面试题及答案整理,最新面试题
Sentinel的流量控制规则有哪些,各自的作用是什么? Sentinel的流量控制规则主要包括以下几种: 1、QPS(每秒查询量)限流: 限制资源每秒的请求次数,适用于控制高频访问。 2、线程数限流…...
Qt在windows编译hiredis依赖库
目录 0 前言1 Qt安装遇到的问题2 hiredis源码下载2.0 redis源码下载2.1 hiredis源码下载2.2 编译hiredis源码2.3 遇到的问题列表参考资料0 前言 当前参与的项目需要用Qt对redis进行操作,以前没玩过这块,顺手记下笔记梳理起来~ 1 Qt安装 安装版本下载:https://download.qt…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

