Docker入门

简介: 1.测试docker是否存在sudo docker info返回docker的基本信息$ sudo docker info//出现一下内容Containers: 2 Running: 0 Paused: 0 Stopped: 2Images: 1.

1.测试docker是否存在

  • sudo docker info
    返回docker的基本信息
$ sudo docker info
//出现一下内容
Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 1
...

2.运行第一个容器

$ sudo docker run -i -t ubuntu /bin/bash
//开始下载容器并运行
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete 
c46b5fa4d940: Pull complete 
93ae3df89c92: Pull complete 
6b1eed27cade: Pull complete 
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
root@363ed45619ae:/# 
  • 注意 可通过 docker help 或者 man docker-run 来获取 docker的命令列表
  • 解析:
    sudo docker run -i -t ubuntu /bin/bash
    其中-i 标志保证容器中STDIN是开启的,持久的标准输入,-t标志是告诉docker为要创建的容器分配一个伪tty终端。 Ubuntu是 创建一个Ubuntu镜像,同时告诉新容器中要运行:/bin/bash 命令。所以就到:root@363ed45619ae:/# 。

3.使用容器

其中容器ID 363ed45619ae 。 也是它的主机名。

root@363ed45619ae:/home# hostname
363ed45619ae
root@363ed45619ae:/home# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  363ed45619ae
  • 网络配置
root@363ed45619ae:/home# ip a
  • 检查容器进程
root@363ed45619ae:/home# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18508  3428 pts/0    Ss   07:34   0:00 /bin/bash
root        21  0.0  0.0  34400  2860 pts/0    R+   07:47   0:00 ps -aux
  • 在容器中安装软件包
root@363ed45619ae:~# apt-get upate    root@363ed45619ae:~# apt-get install vim 
  • 退出容器
exit

退出后,回到自己的物理机

  • 查看当前系统中的容器列表
$ sudo docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         19 minutes ago      Exited (0) 31 seconds ago                       keen_boyd
31ef04a4ff1b        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           gifted_austin
e4166694ac7c        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           brave_kare
  • 查看最后一次运行的容器
$ sudo docker ps -a -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         20 minutes ago      Exited (0) About a minute ago                       keen_boyd

4.容器命名

--name 标志

$ sudo docker run --name hiekay_container -i -t ubuntu /bin/bash
root@989f63da27d3:/# exit
exit

$ sudo docker ps -a -l                                          
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
989f63da27d3        ubuntu              "/bin/bash"         26 seconds ago      Exited (0) 8 seconds ago                       hiekay_container

合法的容器名称符合: [a-zA-Z0-9_·-]

5.重启停止的容器

可以通过容器名称 或则 容器ID

$ sudo docker start hiekay_container
hiekay_container

$ sudo docker start 989f63da27d3                
989f63da27d3

6.附着到容器上

docker容器重新启动的时候 会重启一个交互式会话shell,我们可以用 docker attach 重新附着到该容器会话上 , 可通过容器 name 或者 ID 。

$ sudo docker attach hiekay_container
root@989f63da27d3:/#

$ sudo docker attach 989f63da27d3
root@989f63da27d3:/#

7.创建守护式容器

除了交互式运行的容器,大部分是需要创建长期运行的容器, 守护式容器 没有交互式会话,适合运行应用程序和服务。
实例:

$ sudo docker run --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done" 
ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9

其中-d参数 是标志让容器放在后台运行。
其中 命令是让 运行一个 while 循环 一直打印 hello world ,直到容器或进程停止。

  • 可通过 docker ps命令 查看 正在运行的容器
$ sudo docker ps                                                                                   
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ea6e0fecba4f        ubuntu              "/bin/sh -c 'while t…"   2 minutes ago       Up 2 minutes                            demo
8.查看容器内部的工作
  • docker logs
$ sudo docker logs demo
hello world
hello world
hello world
......

也可以用 -f参数来监控日志

$ sudo docker logs -f demo

也可以用 tail 命令看最后的几行日志

sudo docker logs --tail 10  demo
或
sudo docker logs --tail 0 -f  demo

9.查看容器内的进程

  • docker top
$ sudo docker top demo                                                        
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                31469               31448               99                  16:11               ?                   00:09:46            /bin/sh -c while true; do echo hello world; sleep1; done

10.在容器内运行进程

  • docker exec
    两种类型:后台任务 和 交互式任务
  • 后台任务
$ sudo docker exec -d demo touch /etc/new_file1
  • 交互式任务
$ sudo docker exec -t -i demo /bin/bash        
root@ea6e0fecba4f:/# 

11.停止守护式容器

  • docker stop name/ID
$ sudo docker stop demo 
或
$ sudo docker stop ea6e0fecba4f 
  • 注意: 也可以通过docker kill 关闭

12.自动重启容器

  • 自动重启标志: --restart
$ sudo docker run --restart=always --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 
  • 注意: --restart 被设置为 always ,无论退出代码是什么,一直会自动重启。
    还可以设置为: on-failure 只有当退出代码为0的时候才会自动重启,也可以传参数: 5, 重启次数。
    --restart=on-failure:5

13.深入容器

  • docker inspect 获取更多容器信息
$ sudo docker inspect demo
//获取的信息
[
    {
        "Id": "ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9",
        "Created": "2018-10-29T08:11:49.219017867Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello world; sleep1; done"
        ],
......
  • 可以用 -f 或 --format 标志来选定查看结果 ,支持完整的Go语言模板
    例子:
    查看容器的运行状态
$ sudo docker inspect --format='{{.State.Running}}' demo 
//返回
false

查看容器IP

$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' demo

查看多个容器的信息

$ sudo docker inspect --format='{{.Name}} {{.State.Running}}' demo demo1
/demo false
/demo1 false

14.删除容器

  • docker rm name/ID
$ sudo docker rm demo1                                                                                                
demo1
  • 注意:删除之前 必须先关闭

  • 删除所有

$ sudo rm 'docker ps -a -q '

解析:docker -a 列出所有容器,-q 返回ID, 然后传给 sudo rm ID , 即可删除。

15. 小结

docker 基础,请多联系。

目录
相关文章
|
16天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
56 2
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
89 5
|
2月前
|
Linux 持续交付 Docker
掌握Docker:从入门到实践
Docker 是一个开源容器引擎,允许开发者将应用及其依赖打包成可移植的容器,在任意 Linux 机器上运行。本文从基本概念入手,详细介绍 Docker 的安装、基本操作、镜像构建及 Docker Compose 的使用,并通过实战案例展示如何部署 Web 应用、构建微服务架构及实现 CI/CD。通过学习,你将掌握 Docker 的核心功能,提升应用开发和部署效率。
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
18天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
24天前
|
运维 持续交付 虚拟化
docker入门详解!!!
本文介绍了容器技术的发展历程,从物理机到虚拟化再到容器化,重点讲解了Docker的诞生及其优势。Docker通过轻量级的容器技术,实现了资源的高效利用、快速启动、环境一致性、持续交付和部署等优点。文章还详细解析了Docker的架构和工作原理,包括Docker Daemon、REST接口、Docker Client等组件,以及容器与虚拟机的差异。
59 2
|
1月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
44 3
|
2月前
|
Ubuntu Shell 开发者
Docker入门:轻松开始容器化之旅
【10月更文挑战第17天】Docker 是一种开源的应用容器引擎,它让开发者能够“一次构建、到处运行”。Docker 通过容器化技术将应用程序及其依赖打包在一起,从而确保应用在任何环境中都能一致地运行。本文将为新手用户提供一个全面的Docker入门指南,包括基本概念、优势、安装配置以及如何创建和管理容器。
49 2
|
2月前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
2月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!