操作"/>
Docker应用操作
目录
一、Docker安装
1 卸载版本
2 在线安装
3 离线安装
4 Docker镜像加速
二、常用操作指令
1、Docker 基本操作实践
2、Docker 镜像操作实践
3、Docker 容器操作实践
4、Docker数据管理实践
5、Dockerfile及镜像制作实践
1).制作JDK镜像
2).基于JDK镜像启动sentinel
3).制作Sentinel镜像(镜像启动更便利)
三、Docker 镜像安装实践
1、启动运行mysql
2、安装运行Redis
3、安装运行nginx
4、安装运行Nocas(注意运行参数IP和用户修改成自己的)
四、Docker 容器互联实践
一、Docker安装
Docker是一个虚拟化平台( 官网/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
1 卸载版本
yum list installed | grep docker 列出当前所有docker的包yum -y remove docker的包名称 卸载docker包rm -rf /var/lib/docker 删除docker的所有镜像和容器
2 在线安装
1:安装一组工具:
sudo yum install -y yum-utils
2:设置 yum 仓库地址:
sudo yum-config-manager \--add-repo \.repo
sudo yum-config-manager \--add-repo \.repo
3:更新 yum 缓存:
sudo yum makecache fast #yum 是包管理器
4:列出需要安装的版本列表
yum list docker-ce --showduplicates | sort -r
5:安装 docker:
最新版安装:
sudo yum install -y docker-ce docker-ce-cli containerd.io
指定版安装:
sudo yum install docker-ce-18.06.1.ce
查看版本:docker -v
3 离线安装
1.下载离线安装包
2.下载离线安装工具
/
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
4 Docker镜像加速
163加速:
cat <<EOF > /etc/docker/daemon.json
{"registry-mirrors": ["",""],"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
阿里云加速:
添加阿里云镜像下载地址: vim /etc/docker/daemon.json{"registry-mirrors": [""] }
二、常用操作指令
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 search 镜像名称
下载镜像文件: 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)或 docker rmi 镜像名(rmi = remove image)
添加镜像名称: docker tag redis:5.0.12 redis:v5012 (将第一个名称镜像复制一份,重命名为第二个) #tag
一般用来表示版本,默认的 tag
是 latest
,表示最近的版本。
查看相同镜像: docker images | grep redis # 可以看到同一个镜像(ID相同)可以有多个名称
3、Docker 容器操作实践
创建并启动容器: docker run -it xxxx bash(例:docker run -it centos:7 bash)
# xxxx - 镜像名, 或 image id 的前几位,
#-it 这是两个参数(-i表示交互式操作, -t 表示终端)
# bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令) #-d 参数表示后台运行 (例:docker run -d xxxxx)
查看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
删除多有容器(包括运行中的): docker rm -f $(docker ps -aq) # -f表示强制删除,-q表示只列出容器id,-aq表示列出所有容器id,$(docker ps -aq) 表示引用了所有容器的id,进行批量删除。
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及镜像制作实践
1).制作JDK镜像
构建镜像(需要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'] #指定命令行操作(所有指令与后面内容要有空格)
----------------------
2).基于JDK镜像启动sentinel
第一步:将 sentinel-dashboard-1.8.0.jar 文件拷贝宿主机指定目录,例如/root/servers目录(servers目录不存在可以自己创建)。
第二步:启动镜像容器,通过java执行运行web服务。
基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问)
docker run -d -p 8180:8080 --name sentinel \
-v /root/servers:/usr/sca \
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
第三步:打开浏览器,访问sentinel服务。
访问时你的ip地址应该为宿主机的ip地址,端口号为宿主机的端口号。
----------------------
3).制作Sentinel镜像(镜像启动更便利)
准备资源:
1、centos:7镜像
2、jdk-8u51-linux-x64.tar.gz
3、sentinel-dashboard-1.8.0.jar
通过docker images指令查看centos:7是否存在,然后将 jdk-8u51-linux-x64.tar.gz,sentinel-dashboard-1.8.0.jar放在/root/setup/sentinel目录(目录不存在的话自己创建)。
构建镜像:
1、创建Dockerfile文件,并添加如下内容:
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
2、构建镜像,在Dockerfile所在目录执行docker指令。
docker build -t sentinel:8 . #不要丢掉这里的点
3、运行sentinel容器
docker run -d -p 8180:8080 sentinel:8
#-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名
4、使用 docker ps 指令查看sentinel容器,假如看不到容器,可通过"docker container logs 容器id"方式查看容器状态。
5、登录浏览器访问sentinel(ip地址应该为宿主机的ip地址,端口号为宿主机的端口号)。
三、Docker 镜像安装实践
1、启动运行mysql
如果安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 指令删除再重新安装即可。(sudo表示以管理员的身份运行,如果是管理员可以省略不写)。
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
设置mysql开机自启动: docker update mysql --restart=always
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、检查redis版本: redis-cli -v 或者 redis-server -v
4、登录redis(默认不要密码):redis-cli
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(注意运行参数IP和用户修改成自己的)
通过source指令运行容器目录下的sql文件
source /容器目录/nacos-mysql.sql
创建并启动nacos容器(HOST/USER/PASSWORD/修改成自己的参数)
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.126.128 \
-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:72): docker run -it --name app2 --network t-net centos:7
5、测试网络互通: 在两个终端中分别执行:
ping app1 ping app2
更多推荐
Docker应用操作
发布评论