当前位置: 首页 > news >正文

Docker 的安装和使用

参考资料:

  1. 通俗易懂了解什么是docker?
  2. Docker 教程 | 菜鸟教程
  3. Ubuntu 22.04 安装 Docker
  4. Docker 超详细基础教程
  5. WSL2 支持 systemctl 命令
  6. systemd 和 systemctl 是什么?
  7. 使用正确的命令重启 WSL 子系统
  8. Ubuntu 修改源镜像方法
  9. Docker 中出现 ‘/etc/resolv.conf’: Device or resource busy 错误的处理原因及方式
  10. Linux中永久设置环境变量 LD_LIBRARY_PATH 的终极指南

文章目录

  • 启用 systemd
  • Docker 安装
  • Docker 使用
    • 基本指令
    • 数据卷挂载
    • 简单配置容器

启用 systemd

本人使用 WSL 作为开发环境,但是它默认使用 init 管理进程;使用 systemctl 时会报错。现在我们在 WSL 中启用 systemd 进程管理器。

cd /etcsu #进入 root 权限echo 123 > wsl.conf #新建配置vim wsl.conf

打开配置文件,输入:

[boot]
systemd=true

然后重启 WSL(没法直接 reboot),进入 cmd 执行

wsl --shutdownwsl

查看是否成功启用 systemctl 命令行工具,

systemctl list-unit-files --type=service

Docker 安装

首先更新软件包,

sudo apt-get update		#拉取列表
sudo apt-get upgrade	#实际更新

然后开始安装 Docker,

sudo apt-get install ca-certificates curl gnupg lsb-releasecurl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #添加软件源apt-get install docker-ce docker-ce-cli containerd.i #安装dockersudo usermod -aG docker $USER #配置用户组

然后重启 WSL(和上一节如何启用 systemd 中的步骤一样),启动 Docker 服务

sudo service docker startsudo apt-get -y install apt-transport-https ca-certificates curl software-properties-commonsudo service docker restart

现在尝试运行一个容器(会自动下载,挺小的),

sudo docker run hello-world

它会打印一些信息。

Docker 使用

基本指令

直接输入 docker 将打印帮助信息,

Usage:  docker [OPTIONS] COMMAND
...

各指令的帮助文档

docker [OPTIONS] --help

查看 docker 版本:

docker version

查看本地镜像(下载/导入):

docker images

删除本地镜像(需要先 stoprm 对应的容器),

docker rmi hello-worlddocker rmi $(docker images -a -q) #删除所有镜像

交互式运行 Ubuntu 22.04(下载大约 30 MB 的镜像),使用 exit 退出(会结束容器

docker run -it ubuntu:22.04 /bin/bash #是两个参数 -i 和 -t,但只用其中之一会卡死

后台运行(在容器中运行一个后台程序),

docker run -d ubuntu:22.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

使用如下指令查看所有容器,包括:CONTAINER ID(标志符),IMAGE(镜像),COMMAND(执行的指令),CREATED(创建时间),STATUS(当前状态),PORTS(端口和连接),NAMES(名称)

 docker ps -aCONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
9219b814c9a9   ubuntu:22.04   "/bin/sh -c 'while t…"   About a minute ago   Up About a minute             happy_goldberg

查看某个容器内的标准输出流

docker logs 9219b814c9a9
docker logs happy_goldberg

进入后台容器,使用 exit 退出(仍保持后台运行

docker exec -it 9219b814c9a9 /bin/bash

结束后台容器

docker stop 9219b814c9a9docker stop $(docker ps -a -q) #停止所有容器

重启被结束的容器(数据文件都还在),

docker restart 9219b814c9a9

导出容器快照

docker export 9219b814c9a9 > docker-9219b814c9a9.tar

删除容器(同时也销毁数据),

docker rm 9219b814c9a9docker rm $(docker ps -a -q) #删除所有容器

从快照导入容器镜像(使用 docker images 查看是否成功导入)

docker import docker-9219b814c9a9.tar test:v1

然后尝试运行该镜像(成功恢复了数据),

docker run -itd test:v1 bash

数据卷挂载

为了方便 WSL 中容器和 Windows 主机的交互,我们将 WSL 子系统上的 mnt 目录中的某个文件夹,给挂载到某个容器上。注意,挂载的目录不是容器的一部分,在导出镜像时其中的文件不被保留

首先,在 Windows 主机上新建一个专用目录,例如 D:\Docker

在创建容器时,使用如下指令来挂载目录(挂载到 /root 上),

docker run -v /mnt/d/Docker:/root 34f4123b1ce3

其创建了如下的容器,

CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS          PORTS     NAMES
047bc0c31065   ubuntu:22.04   "bash"    21 seconds ago   Up 20 seconds             elastic_heisenberg

进入该容器,查看 /root 目录(可以和 Windows 主机共享数据):

docker exec -it 047bc0c31065 bashcd /root

简单配置容器

新建的容器是空白的,很多工具包都没有(文本编辑器都没有!),因此这里简单配置一下。

直接 apt update 连不上 http://archive.ubuntu.com/ubuntu/,因此要修改 apt 源。我们已经配置了 /root 挂载,因此可以进入 /etc/apt/,使用如下的指令把要修改的文本复制出来:

cp ./sources.list /root/

然后在 Windows 主机的 D:\Docker 目录内,修改这个文件如下,

# 国内的 apt 源########   Ubuntu22.04LTS 清华镜像源   ###############
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse########   Ubuntu22.04 阿里云镜像源   ###############
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse########   Ubuntu22.04 中科大镜像源   ###############
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

如果依然连不上,那就是 DNS 有问题,需要修改 /etc/resolv.conf 文件。但是在 docker 中宿主的 /etc/resolv.conf 被挂载入容器,在容器中没法删除它(总是报错 “rm: cannot remove ‘./resolv.conf’: Device or resource busy”)。

首先,看一眼文件内容,

cat ./resolv.conf# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.nameserver 10.255.255.254# Based on host file: '/etc/resolv.conf' (legacy)
# Overrides: []

然后,使用如下的替换指令来修改它:

echo "$(sed 's/10.255.255.254/8.8.8.8/g' /etc/resolv.conf)" >  /etc/resolv.conf

现在,可以更新软件列表和软件包了,

apt-get update
apt-get upgrade

然后安装一些必要的软件包,

apt install vim wget curl gitapt install gcc g++ make cmake autoconf automake texinfo libtool

还要对 git 换下源,

git config --global url."https://mirror.ghproxy.com/".insteadOf "https://github.com/"vim ~/.gitconfig

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Day-04-QFile打开文件的两种方式
  • UNIX IPC方法的分类
  • 进程+线程+协程
  • Rust的常数、作用域与所有权
  • 如何将图表数据拟合为函数
  • EmguCV学习笔记 C# 9.3 移动检测类
  • flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位
  • 轻松上手,高效产出:音频剪辑工具年度精选
  • Ubuntu 24.04上卸载LibreOffice
  • 怎样在日常生活中避免泄露个人信息
  • pycharm如何安装selenium
  • Linux 开机自动启动服务
  • android kotlin 数据类 data class
  • python学习8:dict字典的定义,操作和方法,跟json有什么区别?
  • C++:priority_queue(优先级队列)的模拟实现
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【前端学习】-粗谈选择器
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Promise面试题,控制异步流程
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 回流、重绘及其优化
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 利用jquery编写加法运算验证码
  • 免费小说阅读小程序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何优雅地使用 Sublime Text
  • 使用 @font-face
  • 微服务框架lagom
  • Java数据解析之JSON
  • Java性能优化之JVM GC(垃圾回收机制)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • raise 与 raise ... from 的区别
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​如何在iOS手机上查看应用日志
  • #Linux(权限管理)
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (solr系列:一)使用tomcat部署solr服务
  • (蓝桥杯每日一题)love
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (一)Linux+Windows下安装ffmpeg
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core 版本不支持的问题
  • .Net Core 笔试1