一、Docker介绍
-
什么是Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
-
为什么要用Docker
1、快速部署 2、快速动态扩容 3、资源隔离
二、Docker基础
2.1 Docker安装及配置
2.1.2 Centos 7环境安装Docker
## 关闭防火墙
$ systemctl stop firewalld.service vi /etc/selinux/config
$ cd /etc/yum.repos.d/
## 下载阿里云docker社区版 yum源
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 安装Docker ce 社区版
$ yum install -y docker-ce.x86_64
## 设置开机启动
$ wget systemctl enable docker
## 更新xfsprogs
$ wget yum -y update xfsprogs
## 启动docker
$ systemctl start docker
2.1.2 Win10 环境安装Docker
- 下载地址 Docker Desktop for Windows,双击运行exe文件
2.1.3 Mac 环境安装Docker
- 下载地址 Docker Desktop on Mac,双击
Docker.dmg
,打开安装程序,然后将 Docker 图标拖到 Applications 文件夹中
2.2 Docker配置阿里云镜像加速
Docker安装完成后默认的镜像仓库地址是 https://hub.docker.com/
,下载镜像比较慢,可以配置阿里云镜像加速,步骤如下:
-
登录阿里云,访问https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
-
根据操作提示进行操作
##Ubuntu sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ##Centos sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://9sxuudkl.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker ##Mac及Windows请见https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors的操作文档
2.3 Docker基本操作命令
-
构建容器:
docker run 镜像标识|镜像名称[tag]
-i
:表示以交互模式运行容器-d
:表示后台运行容器,并返回容器ID-t
:为容器重新分配一个伪输入终端-p
:将容器内某个端口映射宿主机上的某个端口。-e
:传递环境变量--network
:指定网络模式--add-host
:往容器内添加host地址--name
:为容器指定名称
-
查看正在运行中的容器:
docker ps
-
查询所有容器:
docker ps -a
-
启动容器:
docker start CONTAINER_ID / CONTAINER_NAME
-
停止容器:
docker stop CONTAINER_ID / CONTAINER_NAME
-
重启容器:
docker restart CONTAINER_ID / CONTAINER_NAME
-
删除容器:
docker rm CONTAINER_ID / CONTAINER_NAME
-f
:强制删除
-
停止并删除:
docker stop CONTAINER_ID / CONTAINER_NAME && docker rm CONTAINER_ID / CONTAINER_NAME
-
查看容器详细信息:
docker inspect CONTAINER_ID / CONTAINER_NAME
-
查看容器日志:
docker logs CONTAINER_ID / CONTAINER_NAME
-
进入容器:
docker exec -it CONTAINER_ID / CONTAINER_NAME /bin/bash
-
查找镜像:
docker search CONTAINER_NAME
-
查看本地镜像:
docker images
-
拉取镜像:
docker pull 镜像标识|镜像名称[tag]
-
删除镜像:
docker rm 镜像标识|镜像名称[tag]
三、Docker安装常用镜像
举例了mysql、Redis、MongoDB、Elasticsearch、Nginx 5个常用的镜像部署,如果有需要其他的镜像部署示例,可在评论区进行留言,如果自己会肯定会回复,如果自己不会我先去学一波再回复。。。
3.1 Docker安装Mysql
$ docker search mysql
$ docker pull mysql:5.7
$ docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
3.2 Docker安装Redis
$ docker search redis
$ docker pull redis
$ docker run -itd --name redis -p 6379:6379 redis
3.3 Docker安装MongoDB
$ docker search mongo
$ docker pull mongo
$ docker run -itd --name mongo -p 27017:27017 mongo --auth
3.4 Doker安装Elasticsearch
$ docker search elasticsearch
$ docker pull elasticsearch:7.6.2
$ mkdir -p /mydata/elasticsearch/config
$ mkdir -p /mydata/elasticsearch/data
$ chmod 777 -R /mydata
$ echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx512m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.6.2
3.5 Docker安装Nginx
$ docker search nginx
$ docker pull nginx
$ docker run --name nginx -p 8080:80 -d nginx
四、Docker自定义镜像
4.1 初识Dockerfile
FROM
:基于哪个镜像MAINTAINER
:注明作者COPY
:复制文件进入镜像(只能用相对路径,不能用绝对路径)ADD
:复制文件进入镜像(假如文件是.tar.gz文件会解压)WORKDIR
:指定工作目录,假如路径不存在会创建路径ENV
:设置环境变量EXPOSE
:暴露容器端口RUN
:在构建镜像的时候执行,作用于镜像层面ENTRYPOINT
:在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条CMD
:在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条容器启动后执行默认的命令或者参数,允许被修改命令格式:- shell命令格式:
RUN yum install -y lsof
- exec命令格式:
RUN [ "yum","install" ,"-y" ,"lsof"]
- shell命令格式:
4.2 Dockerfile构建Jar包镜像
-
jar包所在目录:
/var/www/website
-
创建dockerfile
$ touch dockerfile
-
编辑dockerfile
FROM adoptopenjdk/openjdk8-openj9:alpine-slim MAINTAINER programmer_grouth xxxxx@163.com ENV LANG C.UTF-8 WORKDIR /website RUN mkdir /website/logs ARG JAR_FILE=website.jar COPY ${JAR_FILE} app.jar EXPOSE 9015 ENTRYPOINT ["java","-jar","-Xms512m","-Xmx1536m","-Dfile.encoding=UTF-8","app.jar"]
- 构建镜像
$ docker build -t website:v1 .
- 查看镜像
$ docker images
- 运行容器
$ docker run -itd -p 9015:9015 -v /var/www/website:/website --name=website website:v1 /bin/bash
五、Docker-Compose的介绍与安装
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
5.1 Compose 安装
$ yum install -y epel-release
$ yum install -y python-pip
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose==1.24.1
$ docker-compose version
5.2 Docker-Compose快速搭建个人博客
-
创建
docker-compose.yml
文件version: "3.3" services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest volumes: - wordpress_data:/var/www/html ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}
-
启动
$ mkdir my_wordpress $ cd my_wordpress $ docker-compose up -d
六、结语
感谢每位给笔者点双击的伙伴,谢谢您的支持!!!