Docker Getting Started

本文深入探讨Docker的原理与应用,解析如何利用Docker解决环境冲突问题,提供详细的Docker命令指南,包括镜像与容器的操作,以及高级用法如端口映射和容器卷映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Docker 是什么


Docker 是什么上网搜一下就知道了,我只说说自己的体会。Docker 利用 Linux Kernel 提供的 cgroups, namespaces 等技术,构建类似沙盒的环境。在沙盒里你怎么搞破坏都没事,从而达到了与主机环境隔离的作用。也因为 Docker 采用的技术和虚拟机不同,它更轻量、更高效。

最初,Docker 主要用于 Linux。在 Windows 和 Mac OS 上使用 Docker 需要安装 Linux 虚拟机(用来运行 Linux containers)。但是到 2016 年, Windows 声明通过 Hyper-V 技术,Docker 可以 natively 了。Windows 上既可以运行 Linux container,也可以运行 Windows container 了。技术在进步,不过,目前在 Linux 上运行 windows containers 或者在 Mac OS 运行 Linux 和 Windows containers 仍然是需要虚拟机?

 

Docker 有什么用


不同的人有不同的需求,对我而言 Docker 解决了环境冲突的问题。我经常需要在许多软件的不同版本间切换,这导致我的开发环境一片混乱。Docker 让我可以根据不同的需求,创建 container 来解决这个问题,互不干扰。container 不仅仅是一个沙盒,他也可以提供对外的接口和服务,因此用途十分广泛。

 

Docker 常用到的命令


docker 配置
  1. 查看 docker 信息:
docker info
  1. 修改 Docker Root Dir
    修改配置文件中的 graph 字段
    参考

 

image 的相关操作
  1. 查找 image
docker search ubuntu
  1. 列出 image
docker image ls
docker images
  1. 获取镜像
    参考

  2. 从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。"Docker 镜像仓库地址" 的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。"仓库名" 如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
bf5d46315322: Pull complete
9f13e0ac480c: Pull complete
e8988b5b3097: Pull complete
40af181810e7: Pull complete
e6f7c7e5c03e: Pull complete
Digest: sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe
Status: Downloaded newer image for ubuntu:16.04
  1. 以一个容器为基础创建 image
docker commit -m "change somth" -a "somebody info" container_id(docker ps -a 获取 id) 新镜像名字

参考

  1. 删除镜像
docker image rm 名字

注意:只有删除了所有的相关 container,才能删除镜像。

 

container 的相关操作
  1. 列出 container
docker container ls      列出正在运行的 containner
docker container ls -l   列出最新创建的 containner
docker container ls -a   列出所有的 containner

docker container ls 等同于 docker ps

  1. 创建 container
docker run -t -i ubuntu:14.04 /bin/bash 

其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。注意,该命令会生成一个全新的 container。

  1. 启动 container
docker container start

将一个已经终止的容器启动运行。前面的 docker container run 命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用 docker container start 命令,它用来启动已经生成、已经停止运行的容器文件。

  1. 执行 container
docker container exec -it [containerID] /bin/bash  ##docker container 

exec 命令用于进入一个正在运行的 docker 容器。如果 docker run 命令运行容器的时候,没有使用 -it 参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。

  1. 删除 container
docker container rm [containerID] 

如果在运行容器的时候,加上了 --rm 参数,则会在容器终止运行后自动删除容器文件。

  1. 修改 container 的名字
docker container rename old_name new_name

或者在 docker run 从镜像创建容器的时候,加上 --name 选项来指定名字。

  1. 主机与容器的文件传输
sudo docker cp host_path containerID:container_path		// 从主机复制到容器
sudo docker cp containerID:container_path host_path		// 从容器复制到主机
  1. 容器端口映射
docker port <images id> [port] 命令可以让我们快捷地查看端口的绑定情况
docker run 的 "大写 -P" 参数可以自动映射端口,这个还没有实际用过
docker run 的 “小写 -p” 参数可以映射 主机端口:容器端口,可以有多个 -p 参数。
// 例子
docker run -it --name site2 -v /home/deyu/lab/xudeyu.github.io/_site:/root/_site -p 12345:4000 ubuntu /bin/bash
  1. 容器卷映射
docker run -v 主机目录:容器目录。可以指定多个 -v 参数,从而映射多个卷。例子参考上文。
  1. 显示 GUI
// 主机连接本机的 Container
docker run -it -v /etc/localtime:/etc/localtime:ro -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --device /dev/snd --name opencv330 769266b15f71 /bin/bash
// 在 HOST 端需要开启
$ sudo apt-get install x11-xserver-utils
$ xhost +
[参考1](https://www.youkuaiyun.com/article/2015-07-30/2825340)
[参考2](https://blog.youkuaiyun.com/ericcchen/article/details/79253416)
[参考3](https://blog.jessfraz.com/post/docker-containers-on-the-desktop)
[参考4](http://blog.daocloud.io/dockercon-day-2-jessie-image)
  1. 退出容器
docker container kill
docker container stop 前面的docker container kill命令终止容器运行,相当于向容器里面的主进程发出 SIGKILL 信号。而docker container stop命令也是用来终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号。这两个信号的差别是,应用程序收到 SIGTERM 信号以后,可以自行进行收尾清理工作,但也可以不理会这个信号。如果收到 SIGKILL 信号,就会强行立即终止,那些正在进行中的操作会全部丢失。

在容器里执行 exit, 此时容器处于停止状态

  1. 查看容器 LOG
docker container logs [containerID]

docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用 -it 参数,就要用这个命令查看输出。

 

Docker 遇到的问题


  1. 在 docker 中部署了 jekyll,启动服务监听了 127.0.0.1:4000 端口。虽然容器的 4000 端口已经映射到了 host:4000,但是却无法在 host 端通过 4000 端口访问该服务。

    解答:由于监听了 127.0.0.1 为一个回环地址,只能接受本机的访问。因此,无法通过 host 访问。改成 0.0.0.0 可以访问,但是 css 文件找不到了。这应该是另一个问题了。

    参考1
    参考2

 

参考资料


电子书
基本命令查询
官方文档
博客介绍

 
 

<think>首先,用户的问题是:“请问linux servicecommand tostart docker”。用户想知道在Linux系统中如何使用service命令来启动Docker服务。根据系统级指令:-所有行内数学表达式必须使用$...$格式,但这里没有数学内容,所以不需要。-独立公式使用$$...$$,但同样不适用。- LaTeX语法正确:确保在需要时使用正确的LaTeX格式。-使用中文回答:整个回答必须用中文。-生成相关问题:在回答末尾添加相关问题。 -引用段落末尾添加引用标识:如[^1],但必须基于提供的引用。提供的引用:-引用[1]:关于Docker GettingStarted,提到使用docker-compose up-d。-引用[2]:Linux安装Docker,提到停止dockersystemctlstop docker,设置开机启动systemctlenable docker.service,重新加载配置文件systemctldaemon-reload。 -引用[3]:显示Docker容器内的操作。 -引用[4]:关于Docker服务创建。用户的问题是使用service命令启动Docker。在Linux中,service命令是用于管理系统服务的传统方式,但现代系统通常使用systemctl命令,因为systemd是主流初始化系统。从引用[2]中:"停止docker systemctl stopdocker","设置开机启动systemctlenable docker.service","重新加载配置文件systemctldaemon-reload"。这表明systemctl命令用于管理Docker服务。service命令通常是一个包装器,用于兼容旧系统。例如,service dockerstart可能等同于systemctlstart docker。 在回答中,我应该基于引用[2]的内容,因为它直接相关。引用[2]说:"停止docker systemctl stopdocker",所以启动应该是类似的。 关键点:-在Linux中,启动Docker服务通常使用systemctl命令。- service命令可能也可以使用,但推荐使用systemctl。回答结构:1.解释如何使用systemctl启动Docker,因为它是标准方式。 2.提到service命令作为备选。3.确保回答真实可靠。4.使用中文。生成相关问题:在末尾添加2-3个相关问题。 引用标识:在引用段落末尾添加[^2],因为引用[2]是相关的。回答大纲:-介绍:在Linux中,Docker服务可以通过systemctl命令管理。 -步骤:-启动Docker:sudo systemctl startdocker-检查状态:sudo systemctl statusdocker-设置开机启动:sudosystemctlenable docker-提到service命令:sudoservice dockerstart(但强调systemctl是首选)。 -引用[2]的内容:在相关部分添加引用。相关问题:1.如何设置Docker开机自动启动?2.如何检查Docker服务的状态? 3. Docker服务启动失败时如何排查问题? 确保回答清晰、逐步解决问题。</think>### 在Linux中使用service命令启动Docker服务 在Linux系统中,启动Docker服务通常使用`systemctl`命令(现代系统的标准方式),但`service`命令作为兼容旧系统的工具也可以使用。以下是详细步骤和说明,确保您能安全可靠地操作。Linux服务管理依赖于初始化系统(如systemd),因此命令可能因发行版略有差异(如Ubuntu、CentOS等)。以下步骤基于常见Linux发行版(如Ubuntu或CentOS 7+)。 #### 步骤1: 使用service命令启动Docker `service`命令是一个包装器,用于简化服务管理。启动Docker服务的命令格式如下: ```bash sudo service docker start ``` - **说明**: - `sudo`:需要管理员权限,因为服务操作涉及系统级更改。 - `service`:命令本身,用于调用服务脚本。 - `docker`:Docker服务的名称。 - `start`:操作类型,表示启动服务。 - **效果**:执行后,Docker守护进程(daemon)会启动。如果成功,终端通常无输出;您可以通过后续命令验证状态。 #### 步骤2: 验证Docker服务状态 启动后,使用以下命令检查服务是否运行: ```bash sudo service docker status ``` 或使用更现代的`systemctl`命令(推荐): ```bash sudo systemctl status docker ``` - **输出示例**:如果服务正常运行,您会看到类似`active (running)`的状态信息。例如: ``` ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-10-02 10:00:00 UTC; 10s ago ``` #### 步骤3: 其他相关操作 - **停止Docker服务**:如果需要停止,运行: ```bash sudo service docker stop ``` - **设置开机自动启动**:确保Docker在系统启动时自动运行: ```bash sudo systemctl enable docker # 使用systemctl更可靠 ``` 这会将服务添加到启动项中[^2]。 - **重新加载服务配置**:如果您修改了Docker配置文件(如`/etc/docker/daemon.json`),需重新加载: ```bash sudo systemctl daemon-reload # 重新加载systemd配置 sudo service docker restart # 重启服务使更改生效 ``` #### 注意事项 - **兼容性**:`service`命令在大多数Linux发行版中可用(如基于Debian或RHEL的系统),但它是旧式工具。现代系统(如Ubuntu 16.04+ 或 CentOS 7+)推荐优先使用`systemctl`命令(例如`sudo systemctl start docker`),因为它提供更详细的控制和日志[^2]。 - **权限问题**:确保您有sudo权限,否则命令会失败。如果遇到权限错误,检查用户是否在`docker`组中(运行`sudo usermod -aG docker $USER`添加当前用户)。 - **常见错误**:如果启动失败,检查日志: ```bash journalctl -u docker.service # 查看Docker服务日志 ``` 常见原因包括端口冲突或配置文件错误。 通过以上步骤,您可以安全启动Docker服务并管理其生命周期。如果您使用Docker Compose(如引用[1]提到的`docker-compose up -d`),确保Docker服务已运行,否则Compose命令无法执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值