1.Docker概述
Docker包括三个基本概念:镜像、容器、仓库
镜像(Image) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 |
仓库(Repository) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 |
2.Docker安装
Docker的安装分为外网和内网安装。
2.1 外网安装Docker
2.1.1 Ubuntu安装Docker
root@ubuntu:/home/lqs# wget -qO- https://get.docker.com/ | sh
2.1.2 配置Docker镜像加速
Docker镜像加速地址:
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
这里使用阿里云镜像加速阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,查看阿里云加速地址。
- Windows配置加速地址
打开Docker Destop程序,在【Settings】-【Docker Engine】里面,配置加速地址:
{
...
"registry-mirrors":["https://bbx6hlst.mirror.aliyuncs.com"],
...
}
- Ubuntu16.04+、Debian8+、CentOS7配置加速地址
对于使用 systemd 的系统,查看如下文件/etc/docker/daemon.json,如果没有daemon.json文件,则需要使用如下命令新建一个文件(注意mdkir命令是新建一个文件夹)
sudo touch daemon.json
如果文件存在,则使用sudo vim /etc/docker/daemon.json命令,写入如下内容:
{
"registry-mirrors":[
"https://reg-mirror.qiniu.com/"
]
}
之后输入以下命令,重新启动服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
检查加速配置是否生效,输入命令docker info,如果看到以下内容,则表示配置成功:
Registry Mirrors:
https://bbx6hlst.mirror.aliyuncs.com/
2.2 内网安装Docker
Docker离线安装包下载地址:Index of linux/static/stable/x86_64/,这里以在Ubuntu里面安装为例,版本选择的是 docker-20.10.17.tgz
- 通过Xftp将Docker离线安装包上传到Ubuntu任一文件目录下。
- 使用tar命令,解压Docker离线安装包
tar -zxvf docker-20.10.17.tgz
- 使用mv命令,将解压后的Docker离线安装包文件,移到可执行文件目录下
mv docker/* /usr/bin
- 配置docker.service:vim /usr/lib/systemd/system/docker.service,输入以下内容
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
- 启动Docker服务
systemctl daemon.reload
systemctl start docker.service
systemctl info
#开机自启
systemctl enable docker
3.Docker常用命令
docker -v | 查看Docker版本 |
docker info | 查看Docker配置信息 |
docker images | 查看本地主机上的镜像 |
docker pull | 获取一个镜像 docker pull redis(获取redis镜像) |
docker rmi | 删除镜像 docker rmi nginx:latest(表示删除版本为latest的Nginx镜像) |
docker run | 创建并启动一个容器 docker run --name ixuea-redis -p 6379:6379 redis:latest |
docker ps | 查看已经启动的容器 |
docker ps -a | 查看所有容器(包括已启动和未启动) |
docker start | 启动容器 docker start redis |
docker stop | 停止容器 docker stop redis |
docker rm | 删除未运行的容器 docker rm redis |
docker rm -f | 删除正在运行的容器 docker rm -f redis |
4.Docker 镜像(Images)
4.1 Docker官方镜像仓库
官方镜像仓库地址:Docker Hub,带有DOCKER OFFICIAL IMAGE的是官方镜像。如下图所示:
4.2 查看本机上的镜像
使用docker images命令,来查看本地主机上的镜像
root@lqs-virtual-machine:/home/lqs# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 7614ae9453d1 7 months ago 113MB
hello-world latest feb5d9fea6a5 10 months ago 13.3kB
字段含义如下:
REPOSITORY | 表示镜像的仓库源 |
TAG | 镜像的标签,代表这个镜像的版本 |
IMAGE ID | 镜像ID |
CREATED | 镜像创建时间 |
SIZE | 镜像大小 |
4.3 获取一个新的镜像
使用docker pull命令来获取一个新的镜像,如下所示,获取安装Ngnix,#是加上去对应内容的注释,用于解释具体含义:
root@ubuntu:/home/lqs# docker pull nginx
Using default tag: latest
# 表示从library/nginx下载
latest: Pulling from library/nginx
# docker镜像使用类似Git的方式管理,同时采用分层技术
1efc276f4ff9: Already exists
baf2da91597d: Pull complete
05396a986fd3: Pull complete
6a17c8e7063d: Pull complete
27e0d286aeab: Pull complete
b1349eea8fc5: Pull complete
# docker文件的签名
Digest: sha256:790711e34858c9b0741edffef6ed3d8199d8faa33f2870dea5db70f16384df79
# 下载完成
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
4.4 Docker导入导出镜像
1.导出镜像
docker save -o nginx.tar nginx:latest
2.导入镜像
docker load -i nginx.tar
5.容器
5.1 创建并启动一个容器
使用命令docker run,如下所示,创建并启动一个Nginx容器:
docker run --rm --name lqs-nginx -p 80:80 nginx:latest
字段含义如下:
docker run | 表示创建一个容器 |
--rm | 表示退出后,自动删除该容器。 |
--name | 表示给这个容器取一个名字 |
-p | 表示端口映射,格式为主机端口:容器端口,将容器端口映射到当前主机的端口,这样访问当前主机端口,就能访问到容器的端口 |
nginx:latest | 表示使用nginx镜像,latest表示使用最新的版本 |
运行成功后,浏览器访问http://localhost:80/,就能看到Nginx默认页面了,如下所示:
6.Docker部署项目
- 找一个目录存放相关文件,这里选择的目录为:/home/lqs/Work/Test
- 在Test目录下,创建Dockerfile文件
使用命令touch Dockerfile来创建Dcokerfile文件,然后使用命令vim Dockerfile,编辑Dockerfile,输入以下内容:
#指定基础镜像,不需要另外安装jdk
FROM java:8
#维护者
MAINTAINER lqs
#将本地文件添加到容器中,并更名为sms-send.jar
COPY sms-send.jar sms-send.jar
#指定访问端口,与yml文件汇总的端口一致
EXPOSE 8080
#容器启动时,运行该程序
ENTRYPOINT ["java", "-jar", "sms-send.jar"]
- 将jar包放在Test目录下,目录结构如下所示
lqs@lqs-virtual-machine:~/Work/Test$ ls -l
total 231044
-rw-rw-r-- 1 lqs lqs 118 8月 19 15:53 Dockerfile
drwxrwxr-x 2 lqs lqs 4096 8月 19 12:01 logs
-rw-rw-r-- 1 lqs lqs 236579642 8月 19 11:29 sms-send.jar
- 构建镜像
docker build -t sms-send .
- 创建并启动容器
docker run -p 8080:8080 --name sms-send \
> -v /home/lqs/Work/Test/logs:/home/lqs/Work/Test/logs \
> -d sms-send