docker学习笔记

224 阅读5分钟

一、docker名词

1.镜像(image):一个打包好的环境(最小、可用的)

2.容器(container):是由镜像实例化出来的,镜像是层文件系统,容器在镜像的文件系统之上再加一层,打包的时候会将这两层合并

3.挂载(volume:卷):容器中的数据卷

# 具名加载,给数据卷起了名字 -v [数据卷名字]:[镜像中的地址]
sudo docker run -d -p [宿主机端口]:[docker容器端口] -v [数据卷名字]:[docker容器中要挂载的绝对路径] [镜像名]:[TAG]


# 匿名挂载,不给数据卷命名
sudo docker run -d -p xxxx:xxxx -v [docker容器中的绝对路径] [镜像名]:[TAG]

# 查看数据卷列表
sudo docker volume list

# 可以看到第一个就是匿名挂载,docker自动生产的名字,第二个就是具名挂载,按照你提供的名字进行命名
[root@VM_0_6_centos data]# docker volume ls
DRIVER              VOLUME NAME
local               26f3557470a8a61f80cd36ae95f4e50f9eca2795a73acd7edde9a4de86ac7252
local               juming

#查看卷详情
sudo docker volume inspect [卷名字]

# 查具名挂载
[root@VM_0_6_centos data]# docker volume inspect juming
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming/_data", //宿主机上的数据卷存放路径
        "Name": "juming",
        "Options": {},
        "Scope": "local"
    }
]

#查匿名挂载
[root@VM_0_6_centos data]# docker volume inspect 26f3557470a8a61f80cd36ae95f4e50f9eca2795a73acd7edde9a4de86ac7252
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/26f3557470a8a61f80cd36ae95f4e50f9eca2795a73acd7edde9a4de86ac7252/_data",//宿主机上的数据卷存放路径
        "Name": "26f3557470a8a61f80cd36ae95f4e50f9eca2795a73acd7edde9a4de86ac7252",
        "Options": {},
        "Scope": "local"
    }
]

# 数据卷权限,在数据卷挂载命令 -v  后面加上:ro  或者  :rw(默认)
# ro:read-only   只读权限,想要修改容器中的数据卷内容,只能通过更改宿主机上的文件才可以,在容器内是没有写权限的
# rw:read-write  读写权限,宿主机,容器内都可以修改数据卷内容,都有写权限
sudo docker run -d -p xxxx:xxxx -- name xxxx -v volume:/usr/data:ro [镜像名]:[TAG]
sudo docker run -d -p xxxx:xxxx -- name xxxx -v volume:/usr/data:rw [镜像名]:[TAG]

二、安装基本命令

1.安装docker(centos)

# 如果有安装过,就先卸载
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

# 使用阿里云镜像安装(加速)
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.启动docker服务

systemctl start docker

3.配置镜像加速

然后按照提示操作即可

4.docker帮助命令

sudo docker --help

三、容器基本命令(持续补充)

1.pull 镜像

# 如果不清楚镜像的版本。可以先去dockerhub上查阅
sudo docker pull [镜像名]:[版本]

2.运行容器

# -it :交互式的启动,交互式终端操作
# -d :后台运行
# -p :访问宿主机的端口。直接转发到docker容器中的端口上
# -v :挂载宿主机上的目录
# /bin/bash :使用交互式的shell进行操作
sudo docker run -it -d -- name [给容器起的名字] -p [宿主机端口]:[docker容器中的端口] -v [宿主机的绝对路径]:[docker容器中的绝对路径] [docker镜像的名字]:[版本] /bin/bash

3.退出容器终端操作

# 不会退出容器
exit

4.查看容器列表

# 运行的容器
sudo docker ps

# 全部的容器(包括已经停止的容器)
sudo docker ps -a

5.停止容器

# 容器id可以使用sudo docker ps -a 找到
sudo docker stop [容器id]

5.进入容器内,并执行命令

sudo docker exec -it [容器名] /bin/bash

# 使用exit 退出,只会退出命令行操作终端,但是不会退出容器,还有一种attach命令,不推介使用

6.删除容器(前提:容器已停止运行,不能删除正在运行的容器)

sudo docker rm [容器id]

# 清理所有停止状态的容器(慎用)
sudo docker container prune

7.启动已经停止的容器

sudo docker start [容器id]

8.重启容器

sudo docker restart [容器id]

9.导出容器

sudo docker export [容器id] > [要导出的路径]

10.查看容器输入日志

sudo docker logs -f [容器id]

11.查看容器信息

sudo docker inspect [容器id]

四、镜像的基本操作命令(持续补充)

1.查看所有镜像

sudo docker images

2.搜索镜像

sudo docker search [要搜索的内容]

3.删除镜像

sudo docker rmi [镜像id]

4.提交镜像

sudo docker commit -m="提交信息" -a="作者" [容器id] [目标镜像名]:[版本]

五、启动常用容器

1.mysql

# 拉取镜像(5.7版本)
sudo docker pull mysql:5.7

# 启动
# -v 将mysql持久化到宿主机上(主要是这两个目录)
# -e 设置环境变量
# 最后两个(--character-set-server,collation-server)是设置数据库字符集编码的,参照dockerhub官方文档
sudo docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name [自定义的容器名称] -e MYSQL_ROOT_PASSWORD=[设置的root账户的密码] mysql:[版本号] --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

2.nginx

# 准备镜像数据卷的文件夹
cd /home/hmj/docker/project/nginx
sudo mkdir -p {html,conf,logs}
# 拉取镜像
sudo docker pull nginx

# 启动镜像(随意,只为了拿生成的配置文件)
sudo docker run -d --name nginx-test -P nginx

# 从镜像中将配置文件复制到宿主机的/home/hmj/docker/project/nginx/conf路径下
sudo docker cp [容器ID]:/etc/nginx/nginx.conf /home/hmj/docker/project/nginx/conf

# 创建正常的容器
sudo docker run -d --name ken_nginx -p 80:80 -v /home/hmj/docker/project/nginx/html/:/usr/share/nginx/html -v /home/hmj/docker/project/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/hmj/docker/project/nginx/logs:/var/log/nginx nginx

# 修改conf
vim nginx.conf

# nginx.conf 中内容如下:
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    server{
       listen 80;
       charset utf-8;
       server_name www.haomingjian.top;   #网站地址

       location /quanwai/test/ { #路径反向代理
          proxy_pass http://www.haomingjian.top:8989/quanwai/test/; #反向代理转发到的地址
       }
    }
}


# 重启容器
sudo docker restart ken_nginx


# 访问:http://www.haomingjian.top/quanwai/test/