docker学习笔记1,入门到精通

简介: docker学习笔记1,入门到精通

docker运行输出hello world

docker run ubuntu:18.10 /bin/echo "Hello world"

docker: Docker 的二进制执行文件

run: 与前面的 docker 组合来运行一个容器

ubuntu:18.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

/bin/echo "Hello world": 在启动的容器里执行的命令

运行交互式的容器

root@DESKTOP-TC0HL14:~# docker run -i -t ubuntu:18.10 /bin/bash
root@364d1f5780b3:/# 

-t: 在新容器内指定一个伪终端或终端。

-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

进入docker容器内,并查看系统版本

root@364d1f5780b3:/# cat /proc/version 
Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Apr 2 22:23:49 UTC 2021
root@364d1f5780b3:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@364d1f5780b3:/# 

退出容器

root@364d1f5780b3:/# exit
exit

后台模式

root@DESKTOP-TC0HL14:~# docker run -d ubuntu:18.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
bde6d6823cdb502006f99a30345bc16f59b8d6ab69f7997448df213450bb5b90

查看所有容器

root@DESKTOP-TC0HL14:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
bde6d6823cdb   ubuntu:18.10   "/bin/sh -c 'while t…"   4 seconds ago   Up 3 seconds             objective_euclid

created(已创建)

restarting(重启中)

running 或 Up(运行中)

removing(迁移中)

paused(暂停)

exited(停止)

dead(死亡)

宿主主机内使用 docker logs 命令,查看容器内的标准输出:

root@DESKTOP-TC0HL14:~# docker logs bde6d6823cdb

我们使用 docker stop 命令来停止容器:

root@DESKTOP-TC0HL14:~# docker stop bde6d6823cdb
bde6d6823cdb

也可以通过 docker stop dockername

help用法:例如我们要查看 docker pull 指令的具体使用方法:

root@DESKTOP-TC0HL14:~# docker pull --help

拉取镜像

docker pull ubuntu

启动容器

以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:

root@DESKTOP-TC0HL14:~# docker run -it ubuntu:18.10 /bin/bash
root@d21fb258d9e2:/#

查看所有的容器命令如下:

docker ps -a

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

root@DESKTOP-TC0HL14:~# docker run -itd --name ubuntu-test ubuntu /bin/bash
 
root@DESKTOP-TC0HL14:~# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                      PORTS     NAMES
72d289c7ce1f   ubuntu         "/bin/bash"              About a minute ago   Up About a minute                     ubuntu-tes

docker attach:如果从这个容器退出,会导致容器的停止。

docker exec:推荐大家使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。

下面演示了使用 docker attach 命令。

root@DESKTOP-TC0HL14:~# docker attach 72d289c7ce1f

如果要导出本地某个容器,可以使用 docker export 命令。

root@DESKTOP-TC0HL14:~# docker export 72d289c7ce1f > ubuntu-test.tar

导出容器72d289c7ce1f快照到本地文件 ubuntu-test.tar。

这样将导出容器快照到本地文件。

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu-test.tar 导入到镜像 test/ubuntu:v1:

root@DESKTOP-TC0HL14:~# cat ubuntu-test.tar |docker import - test/ubuntu:v1
sha256:193b3451ae486368164c57b3140530544d3640ce58979b0d31996a7809ee9c6a
 
root@DESKTOP-TC0HL14:~# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
test/ubuntu   v1        193b3451ae48   2 minutes ago   72.8MB

此外,也可以通过指定 URL 或者某个目录来导入,例如:

docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器使用 docker rm 命令:

root@DESKTOP-TC0HL14:~# docker rm -f d21fb258d9e2
d21fb258d9e2

下面的命令可以清理掉所有处于终止状态的容器。

root@DESKTOP-TC0HL14:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:

接下来让我们尝试使用 docker 构建一个 web 应用程序。我们将在docker容器中运行一个 Python Flask 应用来运行一个web应用。

root@DESKTOP-TC0HL14:~# docker pull training/webapp #载入镜像
root@DESKTOP-TC0HL14:~# docker run -d -P training/webapp python app.py

-d:让容器在后台运行。

-P:将容器内部使用的网络端口随机映射到我们使用的主机上。

root@DESKTOP-TC0HL14:~# docker ps -a
CONTAINER ID   IMAGE             COMMAND           CREATED         STATUS         PORTS                                         NAMES
5b4b8cd28b52   training/webapp   "python app.py"   4 seconds ago   Up 3 seconds   0.0.0.0:49153->5000/tcp, :::49153->5000/tcp   elastic_roentgen

这里多了端口信息

PORTS

0.0.0.0:49153->5000/tcp, :::49153->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 49153上。

通过访问 127.0.0.1:49153,可以看到容器信息

我们也可以通过 -p 参数来设置不一样的端口:

root@DESKTOP-TC0HL14:~# docker run -d -p 5000:5000 training/webapp python app.py
271e11221a06ed5284d597748030d7ae3138b4de1d0d625811d20bff2ddd2b02
root@DESKTOP-TC0HL14:~# docker ps -a
CONTAINER ID   IMAGE             COMMAND           CREATED         STATUS         PORTS                                         NAMES
271e11221a06   training/webapp   "python app.py"   3 seconds ago   Up 2 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp     thirsty_easley

我可以使用 docker port 271e11221a06 或 docker port thirsty_easley 来查看容器端口的映射情况。

root@DESKTOP-TC0HL14:~# docker port 271e11221a06
5000/tcp -> 0.0.0.0:5000
5000/tcp -> :::5000

查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

root@DESKTOP-TC0HL14:~# docker logs -f 5b4b8cd28b52
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [19/Apr/2022 01:24:32] "GET / HTTP/1.1" 200 -
172.17.0.1 - - [19/Apr/2022 01:24:33] "GET /favicon.ico HTTP/1.1" 404 -

查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

root@DESKTOP-TC0HL14:~# docker top 5b4b8cd28b52
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                961                 940                 0                   09:21               ?                   00:00:00            python app.py

使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker ps -l 查询最后一次创建的容器:

oot@DESKTOP-TC0HL14:~# docker ps -l
CONTAINER ID   IMAGE             COMMAND           CREATED         STATUS         PORTS                                       NAMES
271e11221a06   training/webapp   "python app.py"   3 minutes ago   Up 3 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   thirsty_easley

我们可以使用 docker rm 命令来删除不需要的容器

root@DESKTOP-TC0HL14:~# docker rm thirsty_easley
Error response from daemon: You cannot remove a running container 271e11221a06ed5284d597748030d7ae3138b4de1d0d625811d20bff2ddd2b02. Stop the container before attempting removal or force remove

删除容器时,容器必须是停止状态,否则会报如上错误

我们可以使用 docker images 来列出本地主机上的镜像。

docker images

获取一个新的镜像

docker pull ubuntu:18.10

我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

root@DESKTOP-TC0HL14:~# docker search httpd

我们决定使用上图中的 httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。

root@DESKTOP-TC0HL14:~# docker pull httpd

下载完成后,我们就可以使用这个镜像了。

root@DESKTOP-TC0HL14:~# docker run httpd

删除镜像,镜像删除使用 docker rmi 命令,比如我们删除 ubtuntu:15.10 镜像:

root@DESKTOP-TC0HL14:~# docker rmi ubuntu:15.10

创建镜像

1、从已经创建的容器中更新镜像,并且提交这个镜像

2、使用 Dockerfile 指令来创建一个新的镜像

1.1更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

root@DESKTOP-TC0HL14:~# docker run -it ubuntu:18.10 /bin/bash 
root@ad835b256fb0:/# apt-get update

在运行的容器内使用 apt-get update 命令进行更新,可能需要先更新一下yaml源

在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 ad835b256fb0的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

root@DESKTOP-TC0HL14:~# docker commit -m="has update" -a="test" ad835b256fb0 test/ubuntu:v2
sha256:eace63a9fba9c870204d5dda8ded8819dc044fb8176adda9a6303ef0190f0b3f

-m: 提交的描述信息

-a: 指定镜像作者

ad835b256fb0:容器 ID

test/ubuntu:v2: 指定要创建的目标镜像名

使用我们的新镜像 test/ubuntu:v2 来启动一个容器

root@DESKTOP-TC0HL14:~# docker run -it test/ubuntu:v2 /bin/bash 
root@3a264a683e21:/# 

2.1构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

root@DESKTOP-TC0HL14:~# cat Dockerfile
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"
 
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd wb
RUN     /bin/echo 'wb:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -t wb/centos:7.7 . #注意后面有个点

我们可以使用新的镜像来创建容器

root@DESKTOP-TC0HL14:~# docker run -it ba1830a427bb /bin/bash
root@DESKTOP-TC0HL14:~# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED             STATUS                       PORTS                                         NAMES
72e65c6f52ce   ba1830a427bb      "/bin/bash"              5 seconds ago       Exited (139) 4 seconds ago

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

root@DESKTOP-TC0HL14:~# docker tag eace63a9fba9 test/ubuntu:dev
root@DESKTOP-TC0HL14:~# docker images
REPOSITORY        TAG       IMAGE ID       CREATED             SIZE
test/ubuntu       dev       eace63a9fba9   29 minutes ago      67.3MB

docker tag 镜像ID,这里是 eace63a9fba9 ,用户名称、镜像源名(repository name)和新的标签名(tag)。

docker容器连接

通过docker部署nginx服务

#-p把容器端口随机在物理机随机映射一个端口

root@DESKTOP-TC0HL14:~# docker run --name nginx -p  80 -itd centos
3d29d081bd85b04c9533962ceec6e7c7864c8770915080460f402f5964500048
root@DESKTOP-TC0HL14:~# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS                                     NAMES
3d29d081bd85   centos    "/bin/bash"   10 seconds ago   Up 9 seconds   0.0.0.0:49154->80/tcp, :::49154->80/tcp   nginx


相关文章
|
1月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
202 0
|
6天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
11 0
|
10天前
|
机器学习/深度学习 数据挖掘 Docker
《Docker 简易速速上手小册》第1章 Docker 基础入门(2024 最新版)
《Docker 简易速速上手小册》第1章 Docker 基础入门(2024 最新版)
23 1
|
18天前
|
存储 Ubuntu 关系型数据库
Docker从入门到精通:ubuntu系统安装docker
本文介绍了Docker的安装过程。首先,文章简述了Docker的组成部分:镜像(如模板用于创建容器服务)、容器(运行应用的独立实体)和仓库(存储镜像的库)。接着,针对Ubuntu系统,详细阐述了卸载旧版本Docker、更新软件包、安装依赖、添加Docker官方GPG密钥和软件源、安装Docker以及配置用户组的步骤。最后,通过启动Docker、验证安装是否成功(运行`hello-world`镜像)和查看Docker版本来确认安装完成。
55 12
|
26天前
|
Ubuntu Linux Shell
docker学习笔记3,从入门到精通
docker学习笔记3,从入门到精通
|
26天前
|
应用服务中间件 Shell nginx
docker学习笔记2,入门到精通
docker学习笔记2,入门到精通
|
2月前
|
Java Linux Docker
Docker入门到实战
Docker入门到实战、Centos7安装Docker
|
2月前
|
IDE 数据中心 Docker
使用PyCharm与Docker容器进行开发:从入门到精通
使用PyCharm与Docker容器进行开发:从入门到精通
379 0
|
1月前
|
Docker 容器
进入Docker容器中
进入Docker容器中
38 2
|
3天前
|
Cloud Native Linux 开发者
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用