10分钟,快速学会docker

  • 1 总体框图
  • 2 快速入门
  • 2.1 获取镜像
  • 2.2 查看本地镜像
  • 2.3 运行镜像
  • 2.4 查看正在运行的容器
  • 2.5 修改容器
  • 2.6 删除容器
  • 2.7 提交容器
  • 2.8 通过dockerfile构建镜像跑成容器
  • 2.9 保存文件和重新加载
  • 2.10 其他摘抄
  • 小狐狸的笔记
  • 入门操作
  • 3 多容器部署
  • 3.1 运行nginx容器,并查看ip
  • 3.2 运行alpine容器通过curl访问nginx
  • 3.3 通过--link参数
  • 3.4 三个容器的组织nginx、php、mysql
  • 3.5 docker-compose
  • 3.6 代码解析:
  • 4 参考


1 总体框图

docker 入门实战 docker基础实战教程一:入门_html

2 快速入门

2.1 获取镜像

docker pull nginx
docker pull nginx:latest

2.2 查看本地镜像

docker images

2.3 运行镜像

docker run -d -p 80:80 nginx

-d 后台运行
-p 内外端口映射

2.4 查看正在运行的容器

docker ps

2.5 修改容器

docker exec -it xxxx bash

-it 接容器id
xxxx是容器ID的代号前两位

2.6 删除容器

docker rm -f xxx

xxx为容器ID

2.7 提交容器

docker commit xxx name

xxx为容器ID

2.8 通过dockerfile构建镜像跑成容器

docker 入门实战 docker基础实战教程一:入门_docker 入门实战_02

  • 新建dockerfile文件(写法自行查阅官方文档)
  • 然后在当前目录新建index.html
  • build打包成镜像,此时通过镜像运行容器,nginx的index文件显示为上述内容

2.9 保存文件和重新加载

docker 入门实战 docker基础实战教程一:入门_docker 入门实战_03


保存

docker save name(镜像名称) > name(tar文件名称).tar

docker 入门实战 docker基础实战教程一:入门_html_04

加载

docker load < name(tar文件名称).tar

docker 入门实战 docker基础实战教程一:入门_docker_05

2.10 其他摘抄

小狐狸的笔记

安装和常用CLI:
添加阿里云镜像:sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装命令:sudo yum install -y  docker-ce docker-ce-cli containerd.io
启动命令:sudo systemctl start docker
添加当前用户到docker用户组:sudo usermod -aG docker $USER (需注销),newgrp docker (立即生效)
Helloworld:docker run hello-world  (本地没有镜像的话会自动从远端仓库pull)
pull nginx 镜像:docker pull nginx(等效于nginx:latest)
运行:docker run -【d】(后台运行不阻塞shell) 【-p 80:80】(指定容器端口映射,内部:外部) nginx
查看正在运行:docker ps
删除容器:docker rm -f <container id(不用打全,前缀区分)>
进入bash:docker exec -it <container id(不用打全,前缀区分)> bash
commit镜像:docker commit <container id(不用打全,前缀区分)>  <name>
查看镜像列表:docker images (刚才commit的镜像)
使用运行刚才commit的镜像:docker run -d <name>
使用Dockerfile构建镜像:docker build -t <name> <存放Dockerfile的文件夹>
删除镜像:docker rmi <name>
保存为tar:docker save <name> > <tar name>
从tar加载:docker load < <tar name>

一些启动参数:
后台运行容器:-d
容器内外端口映射:-p 内部端口号:外部端口号
目录映射:-v 'dir name' : <dir>
指定映像版本:<name>:<ver>

入门操作

入门操作


docker 入门实战 docker基础实战教程一:入门_html_06



docker 入门实战 docker基础实战教程一:入门_html_07



docker 入门实战 docker基础实战教程一:入门_docker 入门实战_08



docker 入门实战 docker基础实战教程一:入门_html_09

3 多容器部署

docker 入门实战 docker基础实战教程一:入门_html_10

3.1 运行nginx容器,并查看ip

docker run -d -p 80:80 --name mynginx nginx
docker ps
docker exec -it mynginx bash
cat /etc/hosts

docker 入门实战 docker基础实战教程一:入门_html_11


172.17.0.2是容器的ip

然后我们退出(exit)然后又启动一个新的容器

3.2 运行alpine容器通过curl访问nginx

docker run -dit alpine
docker exec -it xxxx(容器id) sh

apk add curl
curl 172.17.0.2

docker 入门实战 docker基础实战教程一:入门_html_12


docker 入门实战 docker基础实战教程一:入门_docker_13

3.3 通过–link参数

--link

把另一个容器映射到本容器里面(通过修改/etc/hosts文件)

docker 入门实战 docker基础实战教程一:入门_docker 入门实战_14

3.4 三个容器的组织nginx、php、mysql

docker 入门实战 docker基础实战教程一:入门_docker_15


注意:创建顺序需要先mysql,然后启动php的时候link参数映射到mysql,同理类推~

这样对运维来说太麻烦了,有什么好方法吗?docker-compose

3.5 docker-compose

视频地址:https://www.bilibili.com/video/BV1Wt411w72h?from=search&seid=3688284699898465652

项目分为三个模块

  • nginx
  • php
  • mysql

目录结构如下

docker 入门实战 docker基础实战教程一:入门_html_16


使用方式

docker 入门实战 docker基础实战教程一:入门_nginx_17


然后就启动完成了, 如下图

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                NAMES
25b3b7498399        nginx:alpine                      "nginx -g 'daemon of…"   50 seconds ago      Up 3 seconds        0.0.0.0:80->80/tcp   docker-compose-demo-1_nginx_1
c8aa834d8a6f        devilbox/php-fpm:8.0-work-0.106   "/docker-entrypoint.…"   50 seconds ago      Up 3 seconds        9000/tcp             docker-compose-demo-1_php_1
de051f9b9569        mysql:5.6                         "docker-entrypoint.s…"   50 seconds ago      Up 3 seconds        3306/tcp             docker-compose-demo-1_mysql_1

3.6 代码解析:

  • 新建俩文件夹
    conf
    html

docker 入门实战 docker基础实战教程一:入门_docker 入门实战_18

  • 然后在conf/下面建立nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}
http {                                                  
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;

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

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.php$ {                     
            fastcgi_pass    php:9000;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME     /var/www/html/$fastcgi_script_name;    
            include         fastcgi_params;
        }
    }
}
  • 然后写docker-compose.yml
version: "3"
services:
  nginx:
    image: nginx:alpine
    ports:
    - 80:80
    volumes:
    - ./html:/usr/share/nginx/html
    - ./conf/nginx.conf:/etc/nginx/nginx.conf
  php:
    image: devilbox/php-fpm:8.0-work-0.106
    volumes:
    - ./html:/var/www/html
  mysql:
    image: mysql:5.6
    environment:
    - MYSQL_ROOT_PASSWORD=123456
  • 在该目录下运行docker-compose up -d (-d 后台启动)

流程:

docker 入门实战 docker基础实战教程一:入门_nginx_19


docker 入门实战 docker基础实战教程一:入门_docker_20

4 参考

【docker compose演示程序】