Docker基础

一,Docker概述

一款产品,肯定有两种环境,一个开发环境,一个上线环境。开发 ,运维。
境配置是十分麻烦的,每一个机器都要去部署环境。费事费力。
传统:开发jar,运维来做
现在:开发打包部署上线,一套流程做完。打包项目带上环境。

二,DevOps

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

更便捷的升级和扩容

使用了Docker之后,我们的部署就像搭积木一样

项目打包为一个镜像,扩展服务器A,扩展服务器B直接升级,不用给里面一个工具进行升级

更简单的系统运维

在容器化之后,我们的开发,测试环境是高度一致的

更高效的计算资源利用

Docker是内核级别的虚拟化技术,可以在一个物理机上运行多个容器实例。

三,Docker的安装

仓库(repository)

仓库就是用来存放镜像的地方

镜像(image)

docker镜像就好比是一个末班,可以通过这个模板来创建容器服务。

容器(container)

就是一个微小的linux操作系统,我们可以把项目发布在一个容器里面。

环境查看

1
2
3
4
# 内核版本为 3.10
[root@jinggengchen /]# uname -r
3.10.0-514.26.2.el7.x86_64

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 1 卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

# 2 安装必要的工具
yum install -y yum-utils

# 3 设置镜像的仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast
# 4 安装docker
yum install docker-ce docker-ce-cli containerd.io

# 5 启动docker
systemctl start docker

# 6 查看安装
docker version

# 7 运行hello world
docker run hello-world

# 8 查看镜像
docker images

# 9 卸载docker,删除资源
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker

设置阿里云镜像加速

1
2
3
4
5
6
7
8
9
10
11
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qau9aoqi.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

docker卸载

1
2
3
[root@jinggengchen ~]# systemctl stop docker
[root@jinggengchen ~]# yum -y remove docker-ce docker-ce-cli containerd.io
[root@jinggengchen ~]# rm -rf /var/lib/docker

四,Docker命令

基本信息

1
2
3
4
5
6
# 显示docker的版本
[root@jinggengchen ~]# docker version

# 显示docker的系统信息
[root@jinggengchen ~]# docker info

镜像命令

1
2
3
4
5
6
7
8
# 显示本机docker镜像
[root@jinggengchen ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
# 可选项
Options:
-a, --all # Show all images (default hides intermediate images)
-q, --quiet # Only show numeric IDs
1
2
3
4
5
6
7
8
# 镜像搜索
[root@jinggengchen ~]# docker search mysql
# 可选项
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
1
2
# 镜像拉取
[root@jinggengchen ~]# docker pull mysql
1
2
3
4
# 镜像删除
[root@jinggengchen ~]# docker rmi -f [IDs] or [name]
# 删除全部的容器
[root@jinggengchen ~]# docker rmi -f $(docker images -aq)

容器命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 容器启动
[root@jinggengchen ~]# docker run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Options:
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器的端口
-p ip:主机端口:容器端口

# 查看哪些容器启动
[root@jinggengchen ~]# docker ps
Options:
-a # 列出当前正在运行的容器+曾经运行过得容器

# 启动,重启,停止,杀死
[root@jinggengchen ~]# docker start [IDs]
[root@jinggengchen ~]# docker restart [IDs]
[root@jinggengchen ~]# docker stop [IDs]
[root@jinggengchen ~]# docker kill [IDs]
# 删除容器
[root@jinggengchen ~]# docker rm [IDs]

常用的其他命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 后台启动命令
[root@jinggengchen ~]# docker run -d centos 后台启动了,必须要有一个前台进程。
349142a6db81412664cfb6a2bd583d596b58636ba7dfb319912fe114f857b3e2
[root@jinggengchen ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 查看容器中的进程信息
[root@jinggengchen ~]# docker top [IDs]

# 查看容器日志
[root@jinggengchen ~]# docker logs -f -t --tail [IDs]

# 查看容器相关信息
[root@jinggengchen ~]# docker inspect [ID]

# 从容器里面拷贝出主机 # docker cp [ID] 文件所在的容器内的路径 主机路径
[root@jinggengchen ~]# docker cp [ID]:/home/test.java /home

# 拷贝是一个手动的过程,我们可以使用 -v卷的计数,可以实现同步


五,容器数据卷

将应用和环境打包成一个镜像

容器之间可以有一个数据共享的计数,Docker哦容器产生的数据,同步到本地。

这就是卷技术,目录的挂载,将我们的容器内的目录,挂载到Linux上面!

Dockerfile就是用来构建docker镜像的构建文件,它是一个命令脚本,

同时使用容器卷可以实现多个容器之间数据的共享

编写dockerfile脚本

1
2
3
4
5
6
7
8
9

FROM centos

VOLUME ["volume01","volume02"] # 匿名挂载

CMD echo "---END---"

CMD /bin/bash

1
[root@jinggengchen docker-volume]# docker build -f dockerfile -t jgc/centos:1.0 .

进入到自己写的镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@jinggengchen docker-volume]# docker run -it a71c786ce39b /bin/bash
[root@0903e81de862 /]# ll
bash: ll: command not found
[root@0903e81de862 /]# ls -l
total 56
lrwxrwxrwx 1 root root 7 May 11 2019 bin -> usr/bin
drwxr-xr-x 5 root root 360 Jun 23 02:57 dev
drwxr-xr-x 1 root root 4096 Jun 23 02:57 etc
drwxr-xr-x 2 root root 4096 May 11 2019 home
lrwxrwxrwx 1 root root 7 May 11 2019 lib -> usr/lib
lrwxrwxrwx 1 root root 9 May 11 2019 lib64 -> usr/lib64
drwx------ 2 root root 4096 Jan 13 21:48 lost+found
drwxr-xr-x 2 root root 4096 May 11 2019 media
drwxr-xr-x 2 root root 4096 May 11 2019 mnt
drwxr-xr-x 2 root root 4096 May 11 2019 opt
dr-xr-xr-x 84 root root 0 Jun 23 02:57 proc
dr-xr-x--- 2 root root 4096 Jan 13 21:49 root
drwxr-xr-x 11 root root 4096 Jan 13 21:49 run
lrwxrwxrwx 1 root root 8 May 11 2019 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 May 11 2019 srv
dr-xr-xr-x 13 root root 0 Jun 23 02:57 sys
drwxrwxrwt 7 root root 4096 Jan 13 21:49 tmp
drwxr-xr-x 12 root root 4096 Jan 13 21:49 usr
drwxr-xr-x 20 root root 4096 Jan 13 21:49 var
drwxr-xr-x 2 root root 4096 Jun 23 02:57 volume01
drwxr-xr-x 2 root root 4096 Jun 23 02:57 volume02
[root@0903e81de862 /]#

本机的挂载地址

1
2
3
4
5
6
7
[root@jinggengchen volumes]# ll
total 32
drwxr-xr-x 3 root root 4096 Jun 23 10:57 2a7681a5c98084f7d2f160ebc042ff732eb816fd811f88892a1c14eb8dfbff0b
drwxr-xr-x 3 root root 4096 Jun 23 10:57 f68a2cb650cee70014cfc91e52c49e3c2dbbddf3b78462b10e71d0ac71f0a585
-rw------- 1 root root 32768 Jun 23 10:57 metadata.db
[root@jinggengchen volumes]# pwd
/var/lib/docker/volumes

六,DockerFile

DockerFile是用来构建docker镜像的文件,命令参数脚本

构建步骤

  • 编写一个dockerfile文件
  • docker build构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像(dockerHub,阿里云镜像服务)

dockerfile命令指令

docker

1
2
3
4
5
6
7
8
9
10
11
FROM 		# 基础镜像 centos,一切从这里开始构建
MAINTAINER # 镜像是谁写的
RUN # 镜像构建的时候需要运行的命令
ADD # tomcat压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载到那个目录
EXPOSE # 暴露端口
CMD # 指定这个容器要运行时候要执行的命令,只有最后一个会生效
ENTRYPOINT # 可以追加命令
COPY # 将我们的文件拷贝到目录中
ENV # 构建的时候设置环境变量
1
2
3
4
5
6
7
8
9
10
11
12
13

FROM centos
MAINTAINER jinggengchen<1530201142@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

七,Docker-Compose

之前,DockerFile build run 手动操作

之前运行一个镜像,需要添加大量的参数

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

下载路径:

https://github.com/docker/compose/releases/tag/1.24.1

使用Compose基本上是一个三步过程:

  1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
  2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. Run docker-compose upand Compose启动并运行您的整个应用程序。
使用搜索:谷歌必应百度