Docker

Docker

1. 概述

基于Go语言
传统:开发——上线 两套环境 | 应用配置(开发 运维人员)
现在:发布项目(jar + (Redis Mysql jdk Es))整体带上环境打包,一个人就可以搞定

例:java -- apk -- 发布(应用商店)-- 用户使用apk -- 安装即可使用
    java -- jar(环境) -- 打包项目带上环境(镜像) -- (Docker仓库:商店) -- 下载我们发布的镜像 -- 直接运行即可

Docker 是一个容器平台的领导者,应用的容器平台 思路:来自集装箱

隔离:Docker核心思想 | 打包装箱,可以将服务器利用到极致,每个容器都有自己环境
更便捷的升级和扩缩容
    项目打包一个镜像,扩展 服务器A | 服务器B

2010年 容器化技术命名为 Docker
2013年 项目开源 

2. 名词

镜像 Image
    好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像 ==> run  ==> tomcat01容器
容器 container
    独立运行一个或多个应用,通过镜像来创建
    启动,停止,删除等命令  (相当于 简易的linux 系统)
仓库 repository
    存放镜像的地方
    公有仓库
    私有仓库 
    Docker Hub(默认国外的)

3. 安装

适用于 Linux 的 Windows 子系统没有已安装的分发版(用户名:xuety 密码:tianyun123)
利用 win10 自带的虚拟化技术Hyper-V,在虚拟机中安装 Linux内核 ,并在安装 Linux 系统中运行 Docker

查看wsl版本

PS C:\Users\11646> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2

安装Docker软件成功界面
在这里插入图片描述
运行docker run hello-world ,来载入测试镜像测试

xuety@DESKTOP-69ESL5J:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

原理:开始 -> Docker本机寻找资源 -> 判断是否有 -> (没有)去DockerHub下载 -> (有)使用这个镜像运行

4. 工作原理

1.Dcoker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socker从客户端访问!
2.DockerServer接收到Docker-Client的指令,就会执行这个命令。

比VM快
新建容器的时候,有比虚拟机更少的抽象层,利用的是宿主主机的内核,vm则需要Guest OS,分级别的
在这里插入图片描述

5. 常用命令

1.镜像命令

docker images 查看所有本地主机上的镜像

xuety@DESKTOP-69ESL5J:~$ docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
docker/getting-started   latest    cb90f98fd791   2 weeks ago    28.8MB
hello-world              latest    feb5d9fea6a5   7 months ago   13.3kB

repository : 镜像的仓库源
tag:镜像的标签

可选项 -q quiet 只显示镜像id

xuety@DESKTOP-69ESL5J:~$ docker images -q
cb90f98fd791
feb5d9fea6a5

2.搜索命令

xuety@DESKTOP-69ESL5J:~$ docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12461     [OK]
mariadb                          MariaDB Server is a high performing open sou…   4801      [OK]
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   922                  [OK]
percona                          Percona Server is a fork of the MySQL relati…   575       [OK]
phpmyadmin                       phpMyAdmin - A web interface for MySQL and M…   512       [OK]

可选项 --filter 搜索过滤

xuety@DESKTOP-69ESL5J:~$ docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12461     [OK]
mariadb   MariaDB Server is a high performing open sou…   4801      [OK]

3.下载命令

xuety@DESKTOP-69ESL5J:~$ docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
4be315f6562f: Pull complete
96e2eb237a1b: Pull complete
8aa3ac85066b: Pull complete
ac7e524f6c89: Pull complete
f6a88631064f: Pull complete
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

分层下载,docker image的核心 联合文件系统
docker.io/library/mysql:latest #真实地址 <=> docker pull mysql

可选项 --a 搜索版本

xuety@DESKTOP-69ESL5J:~$ docker pull mysql:5.7
5.7: Pulling from library/mysql
4be315f6562f: Already exists
96e2eb237a1b: Already exists

4.删除命令 (容器id)

xuety@DESKTOP-69ESL5J:~$ docker rmi -f cb90f98fd791
Untagged: docker/getting-started:latest
Untagged: docker/getting-started@sha256:b558be874169471bd4e65bd6eac8c303b271a7ee8553ba47481b73b2bf597aae
Deleted: sha256:cb90f98fd791dd49f09903cef3eb2245646b4d76b093825ea78e0f7bb8fb3403

删除所有 docker rmi -f $(docker images -aq)

5.容器命令
docker pull centos
新建容器并启动

docker run [可选参数] image
–name 容器名字
-d 后台运行
-it 进入容器看内容
-p 指定端口
-P 随机指定端口

xuety@DESKTOP-69ESL5J:~$ docker run -it centos
[root@c2778e795e98 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

查看正在运行的容器

xuety@DESKTOP-69ESL5J:~$ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
a0bf51f37a7c   centos    "/bin/bash"   8 seconds ago   Up 8 seconds             dreamy_franklin

查看正在运行和最近创建过的容器

xuety@DESKTOP-69ESL5J:~$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                       PORTS     NAMES
a0bf51f37a7c   centos         "/bin/bash"              2 minutes ago   Up 2 minutes                           dreamy_franklin
c2778e795e98   centos         "/bin/bash"              7 minutes ago   Exited (127) 3 minutes ago             pedantic_hamilton
3285712cbeb4   hello-world    "/hello"                 24 hours ago    Exited (0) 24 hours ago                sharp_spence
e33665d9a257   hello-world    "/hello"                 24 hours ago    Exited (0) 24 hours ago                dreamy_goodall
70f3b4e5a5ec   hello-world    "/hello"                 25 hours ago    Exited (0) 25 hours ago                zen_galile

#可选
-n 显示最近n个创建的容器
-q 只显示id

xuety@DESKTOP-69ESL5J:~$ docker ps -a -n=2
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                       PORTS     NAMES
a0bf51f37a7c   centos    "/bin/bash"   6 minutes ago    Up 6 minutes                           dreamy_franklin
c2778e795e98   centos    "/bin/bash"   11 minutes ago   Exited (127) 8 minutes ago             pedantic_hamilton
xuety@DESKTOP-69ESL5J:~$ docker ps -aq
a0bf51f37a7c
c2778e795e98
3285712cbeb4
e33665d9a257

6.退出主机命令
exit/Ctrl + D 退出容器停止
Ctrl + P + Q 退出不停止

7.删除容器
docker rm 容器id
递归删除全部

xuety@DESKTOP-69ESL5J:~$ docker rm -f $(docker ps -aq)
00366b8ee60f
63ae0a434062
a0bf51f37a7c
c2778e795e98
3285712cbeb4
e33665d9a257
70f3b4e5a5ec
a98c05908208
xuety@DESKTOP-69ESL5J:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

8.启动容器

docker start 容器id
docker stop 容器id
docker kill 容器id
后台运行 docker run -d 容器id
##发现容器停止了,原因:必须有一个前台进程,否则docker发现没有进程就会停止

9.查看日志

docker logs -tf --tail number 容器id
docker run -d centos /bin/sh -c while true;do echo ceshihaha;sleep 1;done" //-c 写命令

10.查看容器中进程

xuety@DESKTOP-69ESL5J:~$ docker top d30440affc3d
UID                 PID                 PPID                C                   STIME               TTY
TIME                CMD
root                1173                1152                0                   02:02               ?

uid 用户id
pid 进程id
ppid 父级id

11.查看容器元数据
docker inspect 容器id

xuety@DESKTOP-69ESL5J:~$ docker inspect d30440affc3d
[
    {
        "Id": "d30440affc3df1c8f212061224ea16490eeba600b1d444afceb419d961a30372",
        "Created": "2022-05-05T02:02:35.309847153Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1173,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-05-05T02:02:35.967177485Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/d30440affc3df1c8f212061224ea16490eeba600b1d444afceb419d961a30372/resolv.conf",

12查看top

xuety@DESKTOP-69ESL5J:~$ docker top ac280460fd27
UID                 PID                 PPID                C                   STIME               TTY
TIME                CMD
root                1387                1368                0                   09:24               ?
00:00:00            /bin/bash

13.安装nginx
docker pull nginx 指定版本

xuety@DESKTOP-69ESL5J:~$ docker pull nginx:1.21-perl
1.21-perl: Pulling from library/nginx
a2abf6c4d29d: Pull complete
156dbdbdfee7: Pull complete
eabf75df4b6b: Pull complete
3a1deb1b35ba: Pull complete
6ac5d2a1a1fd: Pull complete
f882d95ac1a6: Pull complete
Digest: sha256:88100001b6475fcff4b57cff046849f7d3a83bd3f80169a978b06f3346f35f63
Status: Downloaded newer image for nginx:1.21-perl
docker.io/library/nginx:1.21-perl

查看指定镜像 ls 容器

xuety@DESKTOP-69ESL5J:~$ docker image ls nginx
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   4 months ago   141MB

启动nginx

-p 8080:80

xuety@DESKTOP-69ESL5J:~$ docker run --name nginx_1 -p 8080:80 -d nginx_1
ff151f5c734a5ba95abe3d7e34bfa65d2ae7b8c8bcb412faec209c011f095c99

–name 取别名
-p 端口暴露 公网ip:docker内部ip

启动效果图
在这里插入图片描述
查看nginx 配置目录

xuety@DESKTOP-AL0EOR2:/$ docker exec -it mynginx /bin/bash
root@f9d0a73edbbf:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f9d0a73edbbf:/# cd /etc/nginx/
root@f9d0a73edbbf:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
// 把容器内对应的配置项复制到刚才的目录下
此处用cmd操作,用unbutu操作不了
docker cp mynginx:/etc/nginx/nginx.conf D:\DockerContainer\nginx\conf
docker cp mynginx:/etc/nginx/conf.d/default.conf D:\dockerContainer\nginx\conf.d\
docker cp mynginx:/usr/share/nginx/html/index.html D:\dockerContainer\nginx\www
docker cp mynginx:/var/log/nginx D:\dockerContainer\nginx\logs

在这里插入图片描述

关闭 重新创建容器

docker run --name mynginx -p 8080:80 -v D:\dockerContainer\nginx\conf:/etc/nginx/conf -v D:\dockerContainer\nginx\conf.d:/etc/nginx/conf.d -v D:\dockerContainer\nginx\logs:/var/log/nginx -v D:\dockerContainer\nginx\www:/usr/share/nginx/html -d nginx

nginx+php 运行

 xuety@DESKTOP-AL0EOR2:/$ docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                    NAMES
fce222c8eb68   php:7.4.29-fpm   "docker-php-entrypoi…"   5 seconds ago    Up 4 seconds    0.0.0.0:9001->9000/tcp   myphp
97f8745ee720   nginx            "/docker-entrypoint.…"   26 minutes ago   Up 26 minutes   0.0.0.0:8080->80/tcp     mynginx

启动成功截图
在这里插入图片描述

配置nginx.conf.d

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    # docker inspect myphp 172.17.0.2
    location ~ \.php$ {
       root           html;
       fastcgi_pass   php:9000;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
       include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

修改hosts文件

root@782266ccece2:/etc# cat 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      php 74ca817ed935 myphp
172.17.0.3      782266ccece2
127.0.0.1       www.test.com

启动mysql

docker run --name mysql -p 3307:3306 -v D:\dockerContainer\mysql\conf:/etc/mysql -v D:\dockerContainer\mysql\mysqldata:/var/lib/mysql -v D:\dockerContainer\mysql\logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.38

14.更改doker名称

https://www.jb51.net/article/200120.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yunのzc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值