目录
安装docker
离线安装
1.下载docker离线包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
说明,也可以从https://download.docker.com/linux/static/stable/网址下载指定版本
2.下载离线安装工具
https://github.com/Jrohy/docker-install/
下载后将工具解压
3.将以上资源放在一个目录下
4.在linux环境下,将资源放在root目录下,因为root目录有读写权限
5.执行安装操作
# 进入/root/setup/docker 文件夹,没有的话先创建一个
cd /root/setup/docker# 为 install.sh添加执行权限
chmod +x install.sh# 安装
./install.sh -f docker-20.10.6.tgz
安装成功后,会有以下信息
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
docker 20.10.6 install success!
6.查看docker信息
docker info
在线安装
1.安装一组工具
sudo yum install -y yum-utils
sudo为管理员权限
2.设置yum仓库地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
以上两种方式选一即可
3.更新yum缓存
sudo yum makecache fast #yum 是包管理器
4.安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
docker服务相关指令
查看docker是否启动
systemctl status docker
running表示正在运行,dead表示没有运行
停止,启动,重新启动docker服务
systemctl stop/start/restart docker
开启,关闭开机自启docker
systemctl enable/disable docker
查看docker信息
docker info
docker镜像加速
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
docker镜像相关指令
下载镜像(在线)
docker pull 镜像名
例如:docker pull mysql
浏览本地镜像
docker images
查看镜像详情
docker inspect 镜像名/镜像id
查看历史镜像
docker history 镜像名
一个镜像由多个层(layer)组成,通过此指令可查看各个层的创建信息
导出镜像文件
将下载好的镜像文件保存到本地
hello-world为一个镜像,hello-world.tar.gz是保存到本地的镜像文件
docker save hello-world | gzip > hello-world.tar.gz
导出镜像文件(离线)
也可看作是离线下载镜像文件,需要在 hello-world.tar.gz文件所在的根目录
docker load < hello-world.tar.gz
运行镜像
docker run 镜像名
镜像运行会默认启动一个容器
删除镜像
前提是该镜像下没有容器,否则使用-f强制删除
docker image rm 镜像名/镜像id
docker容器相关指令
创建并启动容器
docker run -it 镜像名/镜像id bash
-it,i表示交互式操作,t表示终端
bash表示进入终端,基于交互式进行操作
查看docker中的容器
查看运行中的容器
docker ps
查看所有容器
docker ps -a
查看容器日志
容器在创建是会记录日志,通过以下指令查看日志,若容器启动不起来,通过日志拍错
docker logs 容器id
停止,启动,重启容器
docker stop/start/restart 容器id
进入指定容器
docker exec -it 容器id bash
退出容器
exit
如果是容器创建时进入了容器,退出时,容器就会关闭
如果是容器已创建,进入容器,退出后,容器不会关闭
删除容器
删除指定容器,前提是容器要关闭,否则加-f强制删除
docker rm 容器id
删除没有启动的容器
docker prune
docker数据管理相关指令
容器中管理数据的方式:
1)数据卷
2)挂在主机目录
数据卷操作
创建数据卷
docker volume create 数据卷名
查看所有数据卷
docker volume ls
查看指定数据卷信息
docker volume inspect 数据卷名
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
"Name": "container-vol",
"Options": {},
"Scope": "local"
}
]
Mountpoint为宿主机的数据卷路径
启动挂载数据卷的容器
第一种方式
docker run -it --mount source=数据卷名,target=容器挂载目录 镜像名 bash
第二种方式
docker run -it -v 数据卷名:容器挂载目录 镜像名 bash
删除数据卷
删除指定数据卷,数据卷被容器挂载则不能删除
docker volume rm 数据卷名
删除所有没有被容器使用的数据卷
docker volume prune
挂载主机目录
docker run -v 宿主机目录路径:容器挂载目录路径 镜像名 bash
如果宿主机目录不存在,docker会自动创建该目录
查看挂载目录信息
docker inspect 容器id
...
"Mounts": [
{
"Type": "bind",
"Source": "/usr/app",
"Destination": "/opt/app",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],...
Source为宿主机挂载路径
Destination为容器挂载路径
Docker镜像制作
我们可以将一些文件通过Dockerfile文件描述,再进行build生成自定义镜像
注意:所有的自定义镜像都要基于centos镜像
准备工作
1.centos:7镜像
2.jdk8压缩文件,linux版本
创建Dockerfile文件
在jdk8压缩文件的根文件夹
vim Dockerfile
输入以下内容
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
from就是引入centos:7镜像,所必须要有名为centos:7的镜像
add是添加jdk压缩包,压缩包后跟的是放此文件容器的目录
ENV为容器的环境信息
CMD为启动容器默认添加的指令为bash,如果启动容器最后有指令,该指令会被覆盖
创建jdk镜像文件
docker build -t jdk:8 .
-t表示镜像名,"."表示表示构建过程中从当前目录寻找文件,所以一定要在自定义镜像的目录下执行该指令
进入jdk镜像文件的容器后,用 java -v查看容器是否正常
docker容器互联相关指令
Docker中纯在多个容器时,容器与容器之间通常需要通讯,一般采用以下两种方式
1)两个容器通过宿主机通讯(容器中的端口可以映射到宿主机上,指令-p)
2)两个容器通过虚拟网络进行通讯,但我们必须要创建虚拟网络
新建虚拟网络
docker network create -d bridge t-net
-d为网络类型,默认就是bridge
t-net为虚拟网络的名字
查看网络信息
查看所有网络信息
docker network ls
查看指定网络信息
docker inspect 网络id
创建容器
docker run -it --name 容器名 --network 虚拟网络名 镜像名
基于同一个镜像创建两个不同容器都加入同一个虚拟网络中
测试网络是否互通
进入取其中一个容器
ping 容器1
ping 容器2
两个指令都显示如下内容说明连接成功
[root@35569c623c4c /]# ping app1
PING app1 (172.18.0.2) 56(84) bytes of data.
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
......