目录
一、Docker安装
在线安装
离线安装
Docker镜像加速
二、常用操作指令
1、Docker 基本操作实践
2、Docker 镜像操作实践
3、Docker 容器操作实践
4、Docker数据管理实践
5、Dockerfile及镜像制作实践
三、Docker 镜像安装实践
1、启动运行mysql
2、安装运行Redis
3、安装运行nginx
4、安装运行Nocas
四、Docker 容器互联实践
一、Docker安装
Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
在线安装
1:安装一组工具:?? ? ? ? ? sudo yum install -y yum-utils? 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
离线安装
1.下载离线安装包 ? ? https://download.docker.com/linux/static/stable/网址下载指定版本 2.下载离线安装工具 ? ?https://github.com/Jrohy/docker-install/ 3.将下载好的资源放在一个目录(离线安装包+离线安装工具) ? ?在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录) 4.执行安装操作
# 进入文件夹
cd /root/setup/docker
# 为 install.sh添加执行权限
chmod +x install.sh
# 安装
./install.sh -f docker-20.10.6.tgz
5.安装成功后,检查状态 ? ?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
二、常用操作指令
1、Docker 基本操作实践
为 install.sh添加执行权限: ?? ???????chmod +x install.sh 安装:?? ??? ??? ?????????????????????????????????./install.sh -f docker-20.10.6.tgz 查看Docker信息: ?? ??? ?????????????????docker info 启动docker服务:? ? ? ? ? ? ? ? ? ? ? ? ? systemctl start docker 停止docker服务 : ?? ??? ?????????????????systemctl stop docker 查看Docker状态:? ? ? ? ? ? ? ? ? ? ? ? ?systemctl status docker 设置Docker开机自启:?? ???????????????systemctl enable docker 禁用Docker开机自启:?? ???????????????systemctl disable docker 重新启动Docker服务:?? ???????????????systemctl restart docker
查看docker info中具体key的信息: docker info | grep 'Docker Root Dir:'
2、Docker 镜像操作实践
下载镜像文件:? ? ? ? ? ?docker pull 镜像名 ?(例:docker pull hello-world) 浏览镜像文件:?? ??? ?docker images 运行镜像文件:?? ??? ?docker run hello-world 导入镜像操作:?? ??? ?docker load < hello-world.tar.gz ? 导出镜像文件:?? ??? ?docker save ?hello-world | gzip > hello-world.tar.gz ? 查看镜像历史:?? ??? ?docker history hello-world 查看镜像详情:?? ??? ?docker inspect 镜像名或镜像id(例:docker inspect hello-world) 删除镜像文件:?? ??? ?docker image rm 镜像名或镜像id (例:docker image rm hello-world)
3、Docker 容器操作实践
创建并启动容器:?? ?????????????????ocker run -it xxxx bash(例:docker run -it centos:7 bash) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# xxxx - 镜像名, 或 image id 的前几位, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#-it 这是两个参数(-i表示交互式操作, -t 表示终端) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???# bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令) 查看docker运行中的容器:? ? ?docker ps 查看docker运行所有容器:? ? ?docker ps -a? ? ? ? ? ? ? #-a表示全部(all)
查看容器日志:? ? ? ? ?docker container logs 802 ? ? ? #重要 ,802为容器id ,container可省略不写 查看容器内容:? ? ? ? ?docker inspect 容器id 启动容器:?? ??? ?????????docker container start 容器id 停止容器:?? ??? ?????????docker container stop 容器id 重启容器:?? ??? ?????????docker container restart 容器id 进入容器:?? ??? ?????????docker exec -it 802 bash? ? ? ? ?#802为容器id 退出容器:?? ??? ?????????exit 删除容器:?? ??? ?????????docker container rm 802? ? ? ? ?#802为容器id 清理所有终止状态容器:? ? ? ?docker container prune
4、Docker数据管理实践
#容器中管理数据主要有两种方式: 1.挂载主机目录 (Bind mounts 2.数据卷(Volumes)
创建数据卷:?? ??? ????????docker volume create container-vol ? ?#?container-vol为数据卷名 删除数据卷:?? ??? ????????docker volume rm container-vol? ? ? ? ? #?如果数据卷被容器使用则无法删除 查看所有数据卷:?? ??? ?docker volume ls 查看指定数据卷:?? ??? ?docker volume inspect container-vol 清理无主数据卷:?? ??? ?docker volume prune
启动挂载数据卷的容器:?? ?1):docker run -it -v container-vol:/root centos:7 bash ? ? ?? ??? ??? ? #-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2):docker run -it --mount source=container-vol,target=/root centos:7 bash ? ? ? 挂载主机目录:?? ??? ?docker run -it -v /usr/app:/opt/app centos:7 bash?? ??? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#? /usr/app:为宿主机目录 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? #? /opt/app: 为启动容器的一个目录 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#? -v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。 查看挂载目录信息:? ? ?docker inspect 91a #91a 为容器id
5、Dockerfile及镜像制作实践
构建镜像(需要Dockerfile文件和资源):?? ?docker build -t jdk:8 . ?#不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写. 运行镜像:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? docker run -it jdk:8 bash ---------------------- Dockerfile文件(可通过:touch 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? ???????????????#编写FROM语句(关键字一定要大写,例如FROM不能写小写) ADD? ? ????????????????#通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩 ENV? ? ????????????????#设置环境变量(通过ENV关键字实现,目录启动容器中的目录)? ? ? ?? CMD ['bash']? ? ? ?#指定命令行操作(所有指令与后面内容要有空格) ----------------------
三、Docker 镜像安装实践
1、启动运行mysql
如果安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 指令删除再重新安装即可。
sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23
2、安装运行Redis
1、准备配置文件 ??????创建redis配置文件目录 ??????mkdir -p /usr/local/docker/redis01/conf ??????在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录) ??????touch /usr/local/docker/redis01/conf/redis.conf
2、创建redis实例并启动:?
sudo docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
3、安装运行nginx
1):创建数据卷:?? ??docker volume create nginx-vol ? ? #这个对象会在宿主机直接创建一个目录 2):启动nginx服务:?
docker run --name nginx ?-p 80:80 -v nginx-vol:/etc/nginx -d nginx
#其中? ?:/etc/nginx? 为nginx容器启动时,nginx镜像文件默认的解压目录 #说明:? 假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.
4、安装运行Nocas
? ? ? 通过source指令运行容器目录下的sql文件
source /容器目录/nacos-mysql.sql
?????创建并启动nacos容器(注:参数修改成自己电脑的配置参数)
docker run \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.227.131 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=jason \
-e MYSQL_SERVICE_PASSWORD=jason \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1
#参数说明 #单节点模式? ? ? ? ? ? ? ? ? MODE=standalone #数据库地址? ? ? ? ? ? ? ? ? MYSQL_SERVICE_HOST #数据库用户名? ? ? ? ? ? ? MYSQL_SERVICE_USER #数据库密码? ? ? ? ? ? ? ? ? MYSQL_SERVICE_PASSWORD #需连接的数据库名称 ? ?MYSQL_SERVICE_DB_NAME #端口映射? ? ? ? ? ? ? ? ? ? ? -p 8848:8848 #任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启) ?--restart=always
四、Docker 容器互联实践
Docker 中容器与容器之间进行通讯的解决方案一般有两种: 第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上) 第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
1、新建网络
docker network create -d bridge t-net #t-net为自己起的网络名称
? ? ? 其中,-d driver,网络类型,默认 bridge。 ? ? ? 说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了?
2、列出所属有网络:? ? ?
docker network ls
3、查看网络信息:? ?
docker inspect 67d #67d 为创建的网络id
4、创建容器:?? ??? ?
1): docker run -it --name app1 --network t-net centos:7
2): docker run -it --name app2 --network t-net centos:7
5、测试网络互通:?? ?在两个终端中分别执行:
ping app1?? ?
ping app2
|