开始Docker
1、安装Docker
bash安装(通用所有平台)
-
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过
--mirror
选项使用国内源进行安装:执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker 的稳定(stable)版本安装在系统中。sudo snap install docker $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
-
启动docker
sudo systemctl enable docker sudo systemctl start docker 查看是否成功 systemctl status docker 开机自启动 systemctl enable docker
-
创建docker用户组
$ sudo groupadd docker
-
将当前用户加入docker组
$ sudo usermod -aG docker $USER
-
重启docker服务
systemctl restart docker
-
测试docker安装是否正确
$ docker run hello-world
2、设置ustc的镜像源
(1)在宿主系统编辑或创建文件daemon.json
文件路径:/etc/docker/daemon.json (注:没有则创建。)
mkdir -p /etc/docker
vim /etc/docker/daemon.json
daemon.json中内容如下:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
systemctl daemon-reload
(2)重启docker
启动:
systemctl start docker
停止:
systemctl stop docker
重启:
systemctl restart docker
3、配置防火墙
CentOS 7.0默认使用的是firewall作为防火墙
1、根据端口号得到其占用的进程的详细信息
netstat -tlnp|grep 80
tcp 0 0 192.168.33.10:80 0.0.0.0:* LISTEN 5014/httpd
tcp 0 0 0.0.0.0:48054 0.0.0.0:* LISTEN 5386/java
2、一次性的清除占用80端口的程序
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
3、手工终止进程的运行
kill 5014
kill 5014 如果终止不了,可以强制终止
kill -9 5014
4,查看已经开放的端口:
firewall-cmd --list-ports
5,开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
6、查看防火墙状态
firewall-cmd --state
7、停止firewall
systemctl stop firewalld.service
8、禁止firewall开机启动
systemctl disable firewalld.service
– 开放指定端口
firewall-cmd --zone=public --add-port=3307/tcp --permanent
– 关闭指定端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent
4、输入命令重启防火墙
systemctl restart firewalld.service;
5、输入命令重新载入配置
firewall-cmd --reload;
常用命令
(一)docker 基础命令
1、启动
systemctl start docker
2、关闭
systemctl stop docker
3、重启
systemctl restart docker
4、设置docker自启动
systemctl enable docker
5、查看运行状态
------如果是在运行中 输入命令后 会看到绿色的active
systemctl status docker
6、查看版本号信息
docker version
7、查看 详细信息
--------此命令可以查看到docker 中容器运行个数 以及镜像个数等等
docker info
8、帮助命令
docker 帮助命令 忘记了某些命令便可使用此进行查看与回顾
//docker [命令] --help如:docker pull --help
(二)docker 镜像命令
1、查看镜像列表
docker images
2、搜索镜像
docker search 镜像名
如:搜索STARS >9000的mysql镜像
docker search --filter=STARS=9000 mysql
3、拉取镜像
docker pull 镜像名 (默认最新)docker pull 镜像名:tag(版本号)
4、后台运行容器
run:运行容器。-p:映射,系统外部端口:容器内部端口。-d:后台运行。--name:[name 别名].镜像名:版本 | 镜像id
docker run -p 8086:8080 -d --name tomcat8086 tomcat:8.0
5、删除镜像
rmi中的i表示一个镜像 image。
docker image rm 镜像名称/镜像ID
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
6、保存镜像
将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
docker save tomcat -o /opt/mydocker/locmyimg.tar
7、加载镜像
任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
docker load -i 镜像保存文件位置
(三)docker 容器命令
前言已经说了 docker 容器 就好比 咱java中的new出来对象(docker run 镜像 产生一个该镜像具体容器实例),docker 容器的启动需要 镜像的支持
先放上 docker 容器查看命令
1、查看正在运行容器
docker ps只返回iddocker ps -q
2、查看所有容器
-----包含正在运行 和已停止的
docker ps -a只返回iddocker ps -aq
4、运行容器
后台启动
run:运行容器。-p:映射,系统外部端口:容器内部端口。-d:后台运行。--name:[name 别名].镜像名:版本 | 镜像id
docker run -p 8086:8080 -d --name tomcat8086 tomcat:8.0
启动并进入
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) /bin/bash 交互路径
#docker run -it -d 镜像名:Tag /bin/bash
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
选定网桥配置
--network 网桥名创建网桥:docker network create mynetwork docker run -p 8086:8080 -d --name --network mynetwork tomcat8086 tomcat:8.0
挂载数据卷
docker run -d -it --name mycentos02 -v 数据卷名称:/usr/local/webapp centos
默认路径
cd /var/lib/docker/volumes/
5、停止容器
正常停止容器
docker stop 容器名/容器ID
立即停止容器
docker kill 容器名/容器ID
6、删除容器
#删除一个容器 -f 可删除运行中的容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
7、进入容器
/bin/bash 表示直接进去容器命令行,必加,固定写死的
方法一(推荐):
docker exec -it 容器名/容器ID /bin/bash
方式二:
docker attach 容器名/容器ID
8、退出容器
#-----直接退出 未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭
exit
# 优雅提出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
9、重启容器
docker restart 容器ID/容器名
10、启动容器
docker start 容器ID/容器名
11、容器文件拷贝
———无论容器是否开启 都可以进行拷贝
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
12、查看容器日志
-f:实时展示日志。 -t:加入时间戳展示日志。 --tail n : 展示最后n行日志
docker logs -t 容器ID/容器名
13、查看容器内进程
docker top 容器ID/容器名
14、查看容器内部细节
docker inspect 容器ID/容器名
15、数据卷
自定义路径;不会把容器中的原始数据加载出去
docker run -p 8080:8080 -d --mame mytomcat01 -v 宿主机目录(绝对路径):容器内目录 tomcat:8.0
默认数据卷
docker run -d -it --name mycentos02 -v 数据卷名称:/usr/local/webapp centos
docker run -d -it --name mycentos02 -v mycentos02:/usr/local/webapp centos
默认数据卷路径
/var/lib/docker/volumes/数据卷名称/_data
16、更换容器名
docker rename 容器ID/容器名 新容器名
17、容器自启动
启动容器时,使用docker run命令时 添加参数–restart=always 便表示,该容器随docker服务启动而自动启动
docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
保存数据添加自动重启配置
方法一:数据挂载(数据卷方法)
方法二:修改其启动配置即
命令:
docker update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
(四)网络通信机制
1、创建网桥
docker network create 网桥名docker network create mynet
2、删除网桥
删除一个或多个网桥
docker network rm 网桥名/网桥id
删除全部未链接的网桥‘
docker network prune
3、将容器链接到网桥
docker network connect 网络名/id 容器名/id
4、网桥列表
docker network ls
5、断开容器与网桥的链接
docker network
6、检查网桥详情
docker network inspect 网桥名/网桥id
安装常用软件
1、mysql安装
docker pull mysql:8.0.21
docker pull mysql:5.7
docker network create mynet
docker run -d --name mysql -p 3306:3306 -v mysql8conf:/etc/mysql/conf.d -v mysql8data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=8b311#nbiot# --network mynet mysql:8.0
2、Redis安装
docker pull redis:5.0.5
docker run --name redis02 -d -p 6378:6379 -v redisdata:/data redis:5.0.5 redis-server --appendonly yes
3、Tomcat安装
docker pull tomcat:8.0
docker run -d -p 8081:8080 --name tomcat01 -v tomcat01apps:/usr/local/tomcat/webapps -v tomcat01conf:/usr/local/tomcat/conf tomcat:8.0
4、jdk安装
5、Nginx安装
1、拉取镜像
docker pull nginx
2、启动容器
docker run --name nginx -v nginx02:/etc/nginx -p 3000:80 -d nginx
3、修改配置文件
cd /var/lib/docker/volumes/nginx02/_data
vim nginx.config
server {
listen 80;
server_name 114.132.224.49;
#拦截后与路由匹配成功,跳转 index.html;精确匹配为 location =/xxx
location / {
root /etc/nginx/server/yq/dist;
index index.html index.htm;
}
}
4、放前端项目
mkdir -p /var/lib/docker/volumes/nginx02/_data/server/yq
#之后放打包好的dist文件
Dockerfile
Dockerfile常用命令
官方说明:https://docs.docker.com/engine/reference/builder/
保留字 | 作用 |
---|---|
FROM | 当前镜像是基于哪个镜像的 第一个指令必须是FROM |
MAINTAINER | 镜像维护者的姓名和邮箱地址 |
RUN | 构建镜像时需要运行的指令 |
EXPOSE | 当前容器对外暴露出的端口号 |
WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点 |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包 |
COPY | 类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 |
VOLUME | 容器数据卷,用于数据保存和持久化工作 |
CMD | 指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换 |
ENTRYPOINT | 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数 |
1 FROM 命令
-
基于那个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像 必须作为Dockerfile的第一个指令出现
-
语法:
FROM <image> FROM <image>[:<tag>] 使用版本不写为latest FROM <image>[@<digest>] 使用摘要
2 MAINTAINER 命令
-
镜像维护者的姓名和邮箱地址[废弃]
-
语法:
MAINTAINER <name>
3 RUN 命令
-
RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步
-
语法:
RUN <command> (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
RUN echo hello
RUN ["executable", "param1", "param2"] (exec form)
RUN ["/bin/bash", "-c", "echo hello"]
4 EXPOSE 命令
-
用来指定构建的镜像在运行为容器时对外暴露的端口
-
语法:
EXPOSE 80/tcp 如果没有显示指定则默认暴露都是tcpEXPOSE 80/udp
5 CMD 命令
-
用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
-
注意: Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。
-
语法:
CMD ["executable","param1","param2"] (exec form, this is the preferred form) CMD ["param1","param2"] (as default parameters to ENTRYPOINT) CMD command param1 param2 (shell form)
6 WORKDIR 命令
-
用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。
-
语法:
WORKDIR /path/to/workdir
WORKDIR /a
WORKDIR b
WORKDIR c
`注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对`
7 ENV 命令
-
用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。
-
语法:
ENV <key> <value>ENV <key>=<value> ...
8 ADD 命令
-
用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。
-
语法:
ADD hom* /mydir/ 通配符添加多个文件
ADD hom?.txt /mydir/ 通配符添加
ADD test.txt relativeDir/ 可以指定相对路径
ADD test.txt /absoluteDir/ 也可以指定绝对路径
ADD url
9 COPY 命令
-
用来将context目录中指定文件复制到镜像的指定目录中
-
语法:
COPY src destCOPY ["<src>",... "<dest>"]
10 VOLUME 命令
-
用来定义容器运行时可以挂在到宿主机的目录
-
语法:
VOLUME ["/data"]
11 ENTRYPOINT命令
-
用来指定容器启动时执行命令和CMD类似
-
语法:
["executable", "param1", "param2"] ENTRYPOINT command param1 param2
ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。
Docker Compose
1、安装
1.linux
- 在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。例如,在 Linux 64 位系统上直接下载对应的二进制包。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
2.macos、window
- Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。
Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用
。
3.bash命令补全
$ curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
4.卸载
- 如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
5.测试安装成功
$ docker-compose --version docker-compose version 1.25.5, build 4667896b