2021年Docker最新系列之Docker安装

1. Docker概念:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。

1.1 Docker的组成:
Docker Client客户端:用于与服务端交互,管理镜像和容器。
Docker Daemon守护进程:在宿主主机后台运行的一个进程,接受来自客户的请求,并处理这些请求(创建、运行容器等)。
1.2 Docker的三个概念:
镜像:Docker的镜像可以理解为只读模板,容器基于镜像启动。

容器:Docker的容器是基于镜像启动后的一个具体应用实例(进程),有系统容器和应用容器。

仓库:仓库是存放镜像的地方,有公开仓库(Public)和私有仓库(Private)两种形式。

2. Docker架构:

image-20210724220252559

3. docker部署:

wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

### 安装:
yum install docker-ce -y

### 启动:
systemctl start docker

### 查看docker版本,可以看到client和server的纤细信息,如果只能看到client的,则表示docker服务没有启动:
[root@node1 ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:56:35 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

3.1 前期准备:

docker默认是从docker官方镜像仓库拉取所需镜像的,国内拉取比较慢,所以可以指定国内的镜像仓库。

### 创建daemon配置文件:
[root@node1 ~]# cat >  /etc/docker/daemon.json  <<EOF
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
EOF

### 然后重启服务:
systemctl daemon-reload
systemctl restart docker

4. docker常用命令:

4.1 搜索镜像:
docker  search nginx
4.2 拉取镜像:
### 如果不指定版本,默认拉取最新的版本:
docker pull nginx
或者,指定版本:
docker pull nginx:1.18.0
4.3 查看本地镜像:
[root@node1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    08b152afcfae   45 hours ago   133MB
nginx        1.18.0    c2c45d506085   3 months ago   133MB
4.4 运行容器:
[root@node1 ~]# docker run -d --name nginx_v1 -p 80:80  nginx:1.18.0
96c6e090a1f0226e881e7ba550cf7880b56758d17e8070aeb3f1d367119fb650

-d:      后台模式,容器在后台运行,如果去掉,容器直接在前台运行,会占用当前bash进程。
--name:  容器名字,如果不指定,系统会自动分配一个名字。进入容器,可以用容器名字或者容器id进入。
-p:		 端口映射,将容器的80端口映射到物理机的80端口上,容器启动后,可以直接访问物理机的ip:80
nginx:1.18.0   指定镜像,如果不带版本,则选择最新的镜像。如果指定镜像本地没有,则直接在远程服务器拉取。
4.5 检查容器状态:
### 查看容器,STATUS为up,则表示启动成功:
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                               NAMES
96c6e090a1f0   nginx:1.18.0   "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx_v1

### 如果启动后,没有看到容器,可以使用docker  ps -a, 看到Exited,则表示容器已经退出(停止):
[root@node1 ~]# docker ps  -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
96c6e090a1f0   nginx:1.18.0   "/docker-entrypoint.…"   40 minutes ago   Exited (0) 40 seconds ago             nginx_v1

# 访问容器的web服务,如果看到200的状态码,则表示访问成功:
[root@node1 ~]# curl 192.168.75.121 -I
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 24 Jul 2021 07:47:31 GMT
Content-Type: text/html
4.6 进入容器:
### 进入容器:
[root@node1 ~]# docker exec -it nginx_v1 /bin/bash
root@96c6e090a1f0:/# 

-i   打开标准输入,与容器交互,不添加,则无法交互。
-t   提供一个虚拟终端tty界面。
4.7 退出容器:
### 退出容器:
[root@node1 ~]# docker exec -it nginx_v1 /bin/bash
root@96c6e090a1f0:/# exit
exit
[root@node1 ~]# 
4.8 停止容器:
### 关闭容器:
[root@node1 ~]# docker stop  nginx_v1
nginx_v1
# 可以看到容器已经退出:
[root@node1 ~]# docker ps  -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                      PORTS     NAMES
96c6e090a1f0   nginx:1.18.0   "/docker-entrypoint.…"   40 minutes ago   Exited (0) 40 seconds ago             nginx_v1
[root@node1 ~]# 
4.9 重新启动容器:
[root@node1 ~]# docker start   nginx_v1
nginx_v1
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                               NAMES
96c6e090a1f0   nginx:1.18.0   "/docker-entrypoint.…"   50 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx_v1
4.10 复制文件到容器:
### 创建测试文件:
[root@node1 ~]# echo "this is docker page" > index.html
# 复制普通文件和目录是一样的,不需要加递归参数:
[root@node1 ~]# docker cp index.html nginx_v1:/usr/share/nginx/html/
[root@node1 ~]# curl 192.168.75.121
this is docker page
[root@node1 ~]# 

# 复制时保留文件属性:
docker cp -a index.html  nginx_v1:/usr/share/nginx/html/

# 复制链接文件:
docker cp -L links  nginx_v1:/tmp/
4.11 查看容器日志:
# 打印所有日志(慎用):
[root@node1 ~]# docker logs  nginx_v1

# 打印最后一行日志:
[root@node1 ~]# docker logs  nginx_v1 -n 1
192.168.75.121 - - [24/Jul/2021:08:41:14 +0000] "GET / HTTP/1.1" 200 20 "-" "curl/7.29.0" "-"

# 实时打印容器日志,等同于tailf命令:
[root@node1 ~]# docker logs  -f nginx_v1
4.12 实时显示容器资源使用情况:
### 实时显示指定容器资源使用情况,退出使用Ctrl + c:
[root@node1 ~]# docker stats nginx_v1
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT    MEM %     NET I/O         BLOCK I/O   PIDS
96c6e090a1f0   nginx_v1   0.00%     1.418MiB / 3.84GiB   0.04%     1.29kB / 678B   0B / 0B     2

# 实时显示所有启动的容器的资源使用情况:
[root@node1 ~]# docker stats -a

# 不实时显示,只显示第一个值:
[root@node1 ~]# docker stats  --no-stream nginx_v1
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT    MEM %     NET I/O         BLOCK I/O   PIDS
96c6e090a1f0   nginx_v1   0.00%     1.418MiB / 3.84GiB   0.04%     1.29kB / 678B   0B / 0B     2
[root@node1 ~]# 

4.13 列出容器内的进程信息:
[root@node1 ~]# docker top nginx_v1
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3837                3817                0                   16:30               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 3884                3837                0                   16:30               ?                   00:00:00            nginx: worker process

4.14 列出容器的端口映射:
[root@node1 ~]# docker port nginx_v1
80/tcp -> 0.0.0.0:80
80/tcp -> :::80
4.15 将容器提交为新的镜像:

docker镜像的制作,docker commit只是方式之一,后面用的单独文章写Dockerfile制作。

### 基于修好后的容器,提交为新的镜像:
Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

[root@node1 ~]# docker commit -a "author: lutixia website:www.lutixia.cn" -m "change default index file" nginx_v1 lutixia/nginx:v1
sha256:1511d1b5355967db7ca5eb7cef7de1a148dd931cf0a996bb9a28e43a4a6a92ed

-a:			设置作者信息
-m:			提交信息	


[root@node1 ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
lutixia/nginx   v1        1511d1b53559   3 seconds ago   133MB
nginx           latest    08b152afcfae   47 hours ago    133MB
nginx           1.18.0    c2c45d506085   3 months ago    133MB


### 基于新的nginx镜像,启动新的容器:
[root@node1 ~]# docker  run -d --name nginx_v2  -p 81:80 lutixia/nginx:v1
22c250758dc5f486a1efe28055e765d50dfaa8a13d490372941236acb07a8c23
[root@node1 ~]# 
[root@node1 ~]# curl 192.168.75.121:81
this is docker page

欢迎点赞,收藏,你的喜欢就是我原创的动力,Docker系列将会持续更新。

针对部分知友咨询的镜像下载,常用软件下载,以及Linux相关的电子书,可以到该站点下载。
系统镜像
linux电子书
资源下载地址

好啦,正在学习路上的小伙伴们可以愉快的去下载想要的资料啦。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维朱工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值