Docker

一、安装docker

官网地址

在这里插入图片描述

1.1 卸载旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

1.2 yum安装gcc/gcc-c++

yum -y install gcc

yum -y install gcc-c++

1.3 安装需要的软件包

yum install -y yum-utils

1.4 设置stable镜像仓库

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.5 更新yum软件包索引

yum makecache fast

1.6 安装docker ce

# docker-ce是Docker引擎,docker-ce-cli是客户端
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

1.7 启动docker

# 新版本的Docker就是一个系统服务,可以直接使用启动系统服务方式启动
systemctl start docker

# 此时查看docker版本,可以看到Server: Docker Engine(Docker引擎)版本号
docker version

1.8 卸载docker

# 关闭服务 
systemctl stop docker

# 使用yum删除docker引擎 
yum remove docker-ce docker-ce-cli containerd.io

# 删除镜像、容器、卷、自定义配置等文件
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

二、docker镜像加速

在这里插入图片描述

mkdir -p /etc/docker

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

systemctl daemon-reload
systemctl restart docker

三、帮助启动类命令

#启动docker
systemctl start docker
#停止Docker
systemctl stop docker
#重启Docker
systemctl restart docker
#查看状态
systemctl status docker
#设置开机自启
systemctl enable docker
#查看Docker版本
docker version
#查看Docker概要信息
docker info
#查看Docker总体帮助文档
docker --help
#查看docker具体命令帮助文档
docker 具体命令 --help

四、镜像命令

docker images

参数:

  • -a:列出所有镜像(含历史镜像)
  • -q:只显示镜像ID
  • -f:过滤
docker search 镜像名称

参数:

  • -f:过滤
  • --limit 数量:只展示前几项
docker pull 镜像名称
docker rmi -f 镜像名称/ID

docker rmi -f 镜像1 镜像2 镜像3

# 删除全部镜像
docker rmi -f $(docker images -qa)

五、容器命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用的参数:

  • --name:为容器指定一个名称
  • -d:后台运行容器并返回容器ID,也即启动守护式容器
  • -i:以交互模式(interactive)运行容器,通常与-t同时使用
  • -t:为容器重新分配一个伪输入终端(tty),通常与-i同时使用。也即启动交互式容器(前台有伪终端,等待交互)
  • -e:为容器添加环境变量
  • -P(大写):随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
  • -p:指定端口映射

-p指定端口映射的几种不同形式:

  • -p hostPort:containerPort:端口映射,例如-p 8080:80
  • -p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
  • -p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
  • -p hostPort1:containerPort1 -p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:80 -p 8888:3306
# -i 交互模式
# -t 分配一个伪输入终端tty
# ubuntu 镜像名称
# /bin/bash(或者bash) shell交互的接口
docker run -it ubuntu /bin/bash

退出交互模式:

方式1:exit; # 退出后,容器会停止
方式2:使用快捷键ctrl + P + Q # 退出后容器依然正在运行
docker run -d 容器名
docker ps [OPTIONS]

常用参数:

  • -a:列出当前所有正在运行的容器+历史上运行过的容器
  • -l:显示最近创建的容器
  • -n:显示最近n个创建的容器
  • -q:静默模式,只显示容器编号
# 启动已经停止的容器
docker start 容器ID或容器名
# 重启容器
docker restart 容器ID或容器名
# 停止容器
docker stop 容器ID或容器名
# 强制停止容器
docker kill 容器ID或容器名
# 删除容器
docker rm -f 容器ID或容器名
docker logs 容器ID或容器名
docker top 容器ID或容器名
docker inspect 容器ID或容器名
docker exec -it 容器ID bashShell
# 导出
# docker export 容器ID > tar文件名
docker export mysql > mysql123.tar

# 导入
# cat tar文件 | docker import - 自定义镜像用户/自定义镜像名:自定义镜像版本号
cat mysql123.tar | docker import - test/mytest:1.0.1

六、容器数据卷

docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录[rw | ro] 镜像名

可以使用docker inspect查看容器绑定的数据卷。

权限:

  • rw:读写
  • ro:只读。如果宿主机写入内容,可以同步给容器内,容器内可以读取。
# 启动一个容器
docker run -it --privileged=true /tmp/test:/tmp/docker --name u1 ubuntu /bin/bash

# 使用 --volumes-from 继承 u1的容器卷映射配置
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

七、常见软件安装

7.1 tomcat安装

# 1、拉取镜像
docker pull tomcat
# 2、查看是否拉取到tomcat
docker images tomcat
# 3、使用tomcat镜像创建容器
docker run -d -p 8080:8080 --name tomcat1 tomcat
# 4、新版tomcat修改webapps文件
docker exec -it tomcat1 /bin/bash
rm -r webapps
mv webapps.dist webapps
浏览器输入地址:http://8.137.111.70:8080/

=================tomcat8=============================
docker run -d -p 8080:8080 --name tomcat billygoo/tomcat8-jdk8
浏览器输入地址:http://8.137.111.70:8080/

7.2 mysql安装

# 1、拉取镜像
docker pull mysql:5.7
docker pull mysql # 最新版
# 2、查看是否拉取到tomcat
docker images mysql:5.7
docker images mysql
# 3、使用tomcat镜像创建容器
docker run -d -p 3306:3306 \
           --privileged=true \
           -v /dockerdata/mysql/log:/var/log/mysql \
           -v /dockerdata/mysql/data:/var/lib/mysql \
           -v /dockerdata/mysql/conf:/etc/mysql/conf.d \
           -e MYSQL_ROOT_PASSWORD=123456 \
           --name mysql \
           mysql:5.7

docker run -d -p 3306:3306 \
           --privileged=true \
           -v /dockerdata/mysql/log:/var/log/mysql \
           -v /dockerdata/mysql/data:/var/lib/mysql \
           -v /dockerdata/mysql/conf:/etc/mysql/conf.d \
           -e MYSQL_ROOT_PASSWORD=123456 \
           --name mysql \
           mysql

# 5.7版本在/dockerdata/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题
vim my.cnf
========以下为粘贴内容=======
[client]
default-character-set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
# 5.7版本重启mysql容器,使得容器重新加载配置文件:
docker restart mysql

# 4、连接mysql
docker exec -it mysql /bin/bash
mysql -uroot -p
123456

7.3 redis安装

# 1、拉取镜像
docker pull redis
# 2、查看是否拉取到tomcat
docker images redis
# 3、宿主机创建目录/dockerdata/redis
mkdir -p /dockerdata/redis

# 4、在/dockerdata/redis下创建文件redis.conf(可以从本地拷贝一份),主要修改以下几项配置:
# 开启密码验证(可选)
requirepass 123
# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1
# 关闭保护模式(可选)
protected-mode no
# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
# 开启redis数据持久化, (可选)
appendonly yes

# 5、使用tomcat镜像创建容器
docker run -d -p 6379:6379 --name redis --privileged=true \
           -v /dockerdata/redis/redis.conf:/etc/redis/redis.conf \
           -v /dockerdata/redis/data:/data \
           redis \
           redis-server /etc/redis/redis.conf

# 6、测试连接
docker exec -it redis /bin/bash
redis-cli
127.0.0.1:6379> ping
PONG

八、Dockerfile

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

构建步骤:

  1. 编写Dockerfile文件
  2. docker build命令构建镜像
  3. docker run依据镜像运行容器实例

九、Docker发布微服务

9.1 将项目jar包上传到服务器

9.2 编写Dockerfile

FROM openjdk:8-oracle
# 作者
MAINTAINER liming
# 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD docker_boot-1.0-SNAPSHOT.jar springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]
# SpringBoot项目配置的端口号为6001,需要将6001暴露出去
EXPOSE 6001

9.3 构建镜像

docker build -t springboot_docker:1.0 .

9.4 启动容器

docker run -d -p 6001:6001 --name springboot springboot_docker:1.0

十、Docker网络

# 查看Docker网络模式
docker network ls
# 添加Docker网络
docker network create 网络名
# 删除Docker网络
docker network rm xxx

Docker 的网络模式:

网络模式简介使用方式
bridge为每一个容器分配、设置IP等,并将容器连接到一个docker0
虚拟网桥,默认为该模式
--network bridge
host容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口--network host
none容器有独立的 Network namespace,但并没有对齐进行任何网络设置,如分配 veth pari
和 网桥连接、IP等
--network none
container新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等--network container:NAME或者容器ID

查看某个容器的网络模式:

# 通过inspect获取容器信息,最后20行即为容器的网络模式信息
docker inspect 容器ID | tail -n 20

10.1 自定义网络

容器间的互联和通信以及端口映射。容器 IP 变动时候可以通过服务名直接网络通信而不受影响。(类似Eureka,通过服务名直接互相通信,而不是写死IP地址)。

# 新建自定义网络 
docker network create tomcat_network
# 查看网络列表 
docker network ls
# 创建容器时,指定加入我们自定义的网络中
docker run -d -p 8081:8080 --network tomcat_network --name tomcat1 tomcat:8.5-jdk8-corretto
docker run -d -p 8082:8080 --network tomcat_network --name tomcat2 tomcat:8.5-jdk8-corretto

# 如果创建容器时未加入,可以手动添加
docker network connect tomcat_network tomcat3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钟不想敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值