Docker 上手使用

Docker 笔记

一、Docker简介

​ Docker是一个开源的容器引擎 ,它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker,可更快地打包、测试以及部署应用程序,并可减少从编写到部署运行代码的周期

docker版本

docker有两个版本

  • 社区版 Community Edition (CE)
  • 企业版 Enterprise Edition (EE)

社区版 (CE) 对于希望开始使用Docker并尝试基于容器的应用程序的个人开发人员和小型团队非常理想.

docker 架构

在这里插入图片描述

二、Docker常用命令

docker命令

# 启动docker
systemctl start docker

# 关闭docker
systemctl stop docker

# 重启docker
systemctl restart docker

# 查看docker运行状态
systemctl status docker

docker镜像命令

#查看docker镜像
docker images

#搜索docker镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像

#拉取镜像
docker pull 镜像名 
docker pull 镜像名:tag

#启动docker镜像
docker run tomcat

#删除一个
docker rmi -f 镜像名/镜像ID

#删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID

#删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)

#强制删除镜像
docker image rm 镜像名称/镜像ID

#dokcer保存镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
docker save tomcat -o /myimg.tar


#加载镜像,任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像
docker load -i 镜像保存文件位置

#镜像标签
docker tag 源镜像名:TAG 想要生成新的镜像名:新的TAG

docker容器命令

#查看正在运行容器列表
docker ps

#查看所有容器 -----包含正在运行 和已停止的
docker ps -a

#修改容器名称
docker rename 原容器名 要修改的容器名

#运行一个容器
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 

# 先停止运行的  容器 
docker stop 容器名/容器ID

#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)

#容器端口与服务器端口映射
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

#进入容器内部 方式1
docker exec -it 容器名/容器ID /bin/bash
#进入容器内部 方式2 推荐
docker attach 容器名/容器ID

#退出容器
#直接退出  未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭  
exit
# 优雅退出 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q

#停止容器
docker stop 容器ID/容器名
#重启容器
docker start 容器ID/容器名
#kill 容器
docker kill 容器ID/容器名

#容器文件拷贝 —无论容器是否开启 都可以进行拷贝
#docker cp 容器ID/名称:文件路径  要拷贝到外部的路径   |     要拷贝到外部的路径  容器ID/名称:文件路径
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径  容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径

#查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID



提交docker镜像到阿里云仓库

#提交镜像信息 本地
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag

#登录阿里云仓库
docker login --username=经验丰富老船长 registry.cn-hangzhou.aliyuncs.com

#从阿里云仓库拉取对应的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/lvhaoit/my_ubuntu_1.3:[镜像版本号]

#提交信息
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lvhaoit/my_ubuntu_1.3:[镜像版本号]

搭建私有docker镜像库

#拉取registry镜像
docker pull registry

#启动私服镜像
docker run -d -p 5001:5000 -v /Users/lvhao/server/docker_myRegistry/:/tmp/registry --privileged=true registry

#查询下私服库上是否有镜像
curl -XGET http://127.0.0.1:5001/v2/_catalog

#修改tag参数 (这种格式才能放入私服)
docker tag 镜像:Tag Host:Prot/Repository:Tag
docker tag lvhaoit_ubuntu:1.2_ifconfig 127.0.0.1:5001/lvhaoit_ubuntu:1.2_ifconfig

#增加系统参数 取消docker默认不允许http方式推送
"insecure-registries": ["127.0.0.1:5001"],

#push容器到私服仓库
docker push 127.0.0.1:5001/lvhaoit_ubuntu:1.2_ifconfig

#从私服库拉取
docker pull 127.0.0.1:5001/lvhaoit_ubuntu:1.2_ifconfig

三、容器数据卷

#将两个文件夹内部同步起来,可以完成你写我读 我写你读的操作
#挂载宿主机目录与容器内目录
docker run -it --privileged=true -v [宿主机地址]:[挂载容器内地址] [镜像名/镜像号]
docker run -it --privileged=true -v /Users/lvhao/server/docker_file/ubuntu/:/test/ 499266e3e861 


#查看挂载关系 "Mounts"中就是挂载关系
docker inspect [容器名/id]

#容器利用start重启后 还是可以同步

#容器只读 即宿主机写可以同步给容器,但容器只读
挂载时: /容器目录:ro 镜像名  ro = read only

#容器继承挂载规则 会将文件夹内的同步数据
docker run -it --privileged=true --volumes-from u1 --name u2 my_ubuntu_1.3

四、阿里云容器部署

1.Tomcat部署

# run容器同时挂载项目
docker run -d -p 8080:8080 --name tomcat_8080 --privileged=true -v /docker/tomcat/8080/webapps/:/usr/local/tomcat/webapps fb5657adc892 

# 进入容器内部
docker exec -it bbc6f1a5825c /bin/bash

#上传阿里云
docker tag 7ae57ee4a72a registry.cn-hangzhou.aliyuncs.com/ali_server/tomcat:1.0

# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/ali_server/tomcat:1.0

2.MySQL部署

#启动mysql容器
docker run -d -p 3307:3306 --name mysql_3307 --privileged=true -v /docker/mysql/3307/log:/var/log/mysql -v /docker/mysql/3307/data:/var/lib/mysql -v /docker/mysql/3307/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=lh051920 c20987f18b13

#启动容器失败 查看日志
docker logs 容器id

#进入mysql容器
docker exec -it mysql_3307 /bin/bash

#登录mysql
 mysql -uroot -p
 
#mysql 8 设置允许远程用户访问
update user set host = '%' where user = 'root' and host='localhost'; # 更新root - localhost 为 root - %
 
#查询数据库字符集
 show variables like "character%";

3.Redis部署

# 增加需要绑定的conf文件
# 这个参数自己实际部署是yes,但是docker可以-d运行 这里有这个会启动失败
daemonize no

#	启动redis容器
docker run -d -p 6379:6379 --name redis_6379 --privileged=true -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/conf/data:/data 7614ae9453d1 redis-server /etc/redis/redis.conf

4.Jenkins部署

注意: docker拉取镜像的时候要拉取 jenkins/jenkins 而不是jenkins

要装稳定版

docker pull jenkins/jenkins:lts

#给需要挂载的文件夹授权
chmod 777 /docker/jenkins/

docker run -d -p 8090:8080 -p 8091:50000 --privileged=true --name jenkins_8090 -v /docker/jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins:lts

-d 后台运行镜像
-p 8090:8080 将镜像的8080端口映射到服务器的8090端口。
-p 8091:50000 将镜像的50000端口映射到服务器的8091端口
-v /data/jenkins_home:/var/jenkins_home /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /data/jenkins_home目录
-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。
–name jenkins_8090 给容器起一个别名

#查看对应的日志,找到生成的密码
 docker logs jenkins_8090
 
#修改jenkins的镜像地址为清华地址  hudson.model.UpdateCenter.xml
<url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>

# 安装maven
docker cp /maven/maven-3.8.6 jenkins_8090:/maven/

#权限问题 Permission denied
#加上 --user=root 参数    切记最后的参数要使用 /bin/sh
docker exec -it --user=root f939f8e98c5b /bin/sh 

#增加软连接 (不需要进入到原来的路径也可以验证Maven安装)
ln -s /maven/apache-maven-3.8.6/bin/mvn /usr/local/bin/mvn

猜你喜欢

转载自blog.csdn.net/qq_27331467/article/details/129672624