docker使用与配置

docker基础知识

第一章docker基础知识

一、docker简介

Docker是一个开源的容器引擎,它基于LXC容器技术,使用Go语言开发。

源代码托管在Github上,并遵从Apache2.0协议。

Docker采用C/S架构,其可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

简单来说:Docker就是一种快速解决业务稳定环境的一种技术手段(快速搭建环境)。

一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像备注:有的系统会无效,自行上网搜索解决方法
  4. DockerContainer容器

二、原理解析

Docker Engine是一个C/S架构的应用程序,主要包含下面几个组件:

dockerd进程:常驻后台进程Dockerd

REST API Server:用来和 Dockerd 交互的

命令行CLI接口:和 REST API 进行交互(常用docker 命令)

分工合作

Docker 使用 C/S 体系的架构

Docker 客户端与 Docker 守护进程通信

Docker 守护进程负责构建,运行和分发 Docker 容器。

Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。

Docker 客户端和守护进程使用 REST API 通过UNIX套接字或网络接口进行通信。

三、docker安装

注意:如果安装方法无法就上网查

ubuntu:sudo apt install docker-ce -y

如果安装不成功:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable"

sudo apt install docker-ce -y

centos: yum install docker-ce docker-ce-cli containerd.io

启动:systemctl start docker

重启:systemctl restart docker

停止:systemctl stop docker

开机自动启动:systemctl enable docker

关闭自动启动:systemctl disable docker

修改docker镜像源:

echo '{"registry-mirrors": ["http://hub-mirror.c.163.com"]}' > /etc/docker/daemon.json

配置docker免sudo:

sudo usermod -aG docker $USER

sudo systemctl restart docker

备注:有的系统会无效,自行上网搜索解决方法

第二章 docker基础管理

一、镜像管理

查找镜像:

docker search 镜像名

下载镜像:

docker pull 镜像名

从本地安装镜像:

docker image load -i 镜像包

简写:docker load -i 镜像包 或者 docker load < 镜像包

删除本地镜像:

docker image rm 镜像ID 或者 镜像名称
简写:docker rmi image_id

删除全部镜像:

docker rmi $(docker images -q)

镜像历史:

docker history image_id

标签:

docker tag old_image:old_version new_image:new_version

制作镜像:

docker commit -a ‘作者’ -m ‘描述’ 容器ID 新镜像名:版本

打包导出:

docker image save -o 镜像包.tar.gz 镜像:版本 # 保存到当前目录下
简写:docker save -o 镜像包.tar.gz 镜像

二、容器管理

查看正在运行的容器:

docker container ls

简写:docker ps

查看所有容器

docker container ls -a

简写:docker ps -a

关闭/启动/重启:

docker container stop | start | restart 容器ID

停止所有容器:

docker stop $(docker ps -a -q)

删掉容器:

docker container rm 容器ID
简写:docker rm 容器ID

删除全部容器:

docker rm $(docker ps -a -q)

强制删除容器:

docker container rm -f 容器ID
简写:docker rm -f 容器ID

查看容器运行日志:

docker logs 容器ID

创建新容器并运行容器:

docker run -itd 镜像名:版本

交互式容器(登录容器):

docker exec -it ID /bin/bash

三、数据管理

数据卷(映射目录):(重要)

docker run -itd -v [宿主机文件]:[容器文件] [镜像id/镜像名]

注意:-v 宿主机文件:容器文件 可以存在多个,表示同时挂载多个

宿主机文件尽量用绝对路径,容器文件即使不存在,Docker自动创建

四、网络管理

端口映射(随机) 网络模式默认为bridge模式

docker run -itd –name 别名 -P image_id # -P 大写P

端口映射(指定) 网络模式默认为bridge模式

docker run -itd –name 别名 -p 8080:80 image_id # -p 小写p

host模式

docker run -itd –name 别名 –netword=host image_id

第三章 Dockerfile

Dockerfile简而言之就是 编写Dockerfile脚本实现自动化构建自己想要的镜像

使用准则

1、大: 首字母必须大写D

2、空: 尽量将Dockerfile放在空目录中。

3、单: 每个容器尽量只有一个功能。

4、少: 执行的命令越少越好。

基础指令

  • FROM: 指定基础镜像(镜像要已存在)
  • MAINTAINER: 维护者信息(姓名/邮箱)
  • RUN: 镜像操作指令
  • ADD:上传文件,一般用于上传压缩包,会自动解压压缩包
  • COPY:上传一般文件
  • EXPOSE:开放端口
  • WORKDIR:切换目录
  • ENTRYPOINT: 容器启动时执行指令

构建镜像:

cd 到Dockerfile所在的目录

docker build -t 新镜像名:版本 ./

执行完后会生成一个新的镜像

# 选择基础镜像
FROM centos:latest
# 作者
MAINTAINER caijinbo

# shell指令安装软件
RUN yum install -y nginx python3-devel net-tools openssh-server openssh-clients passwd gcc mariadb-devel

# 把工程上传到容器
ADD front_end_pc.tar.gz /data/
ADD project_admin.tar.gz /data/
ADD project.tar.gz /data/
COPY requirements.txt /data/
# 切换到工程目录,并安装依赖
WORKDIR /data/project/
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir --default-timeout=1000 -r /data/requirements.txt

COPY 8000.conf /etc/nginx/conf.d/
COPY 8080.conf /etc/nginx/conf.d/
COPY 8081.conf /etc/nginx/conf.d/

# 设置环境变量,作用:指定系统语言为UTF-8,否则,uwsgi运行无法处理中文语言
# ENV LC_ALL=zh_CN.UTF-8

# 容器开放端口8080和8081
EXPOSE 8080 8081

# 发送容器启动脚本
COPY command.sh /data/

# 切换容器目录
WORKDIR /data

# 指定容器运行的启动脚本
ENTRYPOINT ["/bin/bash","/data/command.sh"]

在Dockerfile同级目录下新建一个脚本

vim command.sh

cd /data/project/ 
uwsgi --ini uwsgi.ini 
nginx -g 'daemon off;' 

注意:所有要操作的文件或压缩包均放在Dockerfile同级目录下