docker 是基于linux系统的
1.docker 安装(需要联网)
1.1 卸载旧版本 (\表示连接符)
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2 Docker 仓库进行安装
设置仓库 安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
选择 阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker Engine-Community
sudo yum install docker-ce docker-ce-cli containerd.io
回车 选择是
启动docker
sudo systemctl start docker
加入开机启动
systemctl enable docker
校验运行hello-world
sudo docker run hello-world
other
安装完docker后
1.启动 systemctl start docker
2.查看状态 systemctl status docker
3.服务器重启了,启动docker : service docker start
4.设置docker开机启动:systemctl enable docker
2.docker 基本命令
docker version :查看容器版本信息
docker images :查看镜像
docker ps :查看正在运行的容器
docker ps -a :查看所有的运行的容器,包含停止的容器
docker ps -n 5 :显示最近创建的几个容器
docker ps -q :只显示容器编号ID
docker pull xxx :拉取xxx镜像,默认拉取最新的:lastest 可以跟指定版本
docker run -it --name aaa xxx :启动xxx镜像,并命名为aaa,并且以交互模式进入容器中 退出:ctrl+p+q
docker run -itd --name aaa xxx /bin/bash :运行xxx的镜像,并取名为aaa 以后台模式启动
docker start 容器名 :启动容器
docker stop -f 容器名 :强制停止容器
docker kill 容器id :停止容器
docker restart 容器id :重启容器
docker attach 容器id :进入容器,退出容器会导致停止容器
docker exec -it 容器名 :进入容器,退出容器不会导致停止容器
docker rm -f 容器id :强制删除容器
docker rmi 镜像id :删除镜像
docker run -P -d nginx:latest :使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -p 80:80 -v /data:/data -d nginx:latest 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run --name kn -p 8081:8080 harbor.io/qas/knife4jdemo:v1
docker port 容器id :查看指定容器的某个确定端口映射到宿主机的端口号
docker logs -f 容器名 :查看容器内的日志信息
docker top 容器id :查看容器内运行的进程
docker search 镜像名/镜像id :搜索镜像,在http://hub.docker.com 搜索镜像
docker create --name mydocker nginx :创建一个新的容器,但不启动它
docker inspect 容器id :获取容器的元数据
docker top 容器id :显查看容器中运行的进程信息
docker log -f --tail 100 容器名 : 查询容器里面的日志信息,显示最新100行
docker 挂载容器数据卷
加上:--privileged=true
挂载数据卷 : docker run -it --privileged=true -v /宿主机绝对路径目录:/容器目录 镜像名
other
docker commit 提交容器副本,使其成为新的镜像
:docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
导出容器成tar
docker export 容器id > 文件名.tar
将tar恢复到新的镜像
cat 文件名.tar | docker import -镜像用户/镜像名:[标签名]
docker Registry 私服版本镜像仓库
1.docker pull registry 拉取镜像
2.docker run -d -p 5000:5000 -v /huk/myregistry/:/tmp/registry --privileged=true registry
3.DockerFile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
例子:
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
1.FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
2.RUN:用于执行后面跟着的命令行命令
2.1:RUN <命令行命令>
2.2:RUN ["可执行文件", "参数1", "参数2"]
RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
3.COPY:拷贝指令,从上下文目录中复制文件或者目录到容器里指定路径,将镜像拷贝到容器里面
3.1 ADD :拷贝命令,与COPY 一致,但区别是ADD可以拷贝后,如果是压缩文件tar,会进行自动解压
4.ENV:设置环境变量 ENV <key1>=<value1> <key2>=<value2> 在后续的指令中可以通过 $定义的名称 引用
5.VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷 VOLUME ["<路径1>", "<路径2>"...]
6.EXPOSE:声明端口
7.MAINTAINER:镜像维护者姓名或邮箱地址
8.CMD:容器中启动默认运行的指令,多个CMD,最后一个生效,前面的会被覆盖,命令行指定的命令会覆盖CMD里面的指令
9.ENTRYPOINT:和CMD一样,容器启动时默认运行指令但不会被覆盖,会被追加
10.ONBUILD : 触发器,生效于由该dockerfile构建出来的新images被用于另外一个dockerfile中的指令作为基础镜像的时候,触发
11.WORKDIR : 启用容器,登录到容器里面时的目录
3.1 Docker Compose是一个用来定义和运行复杂应用的Docker工具,负责实现对 Docker 容器集群的快速编排
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景
3.1 安装 DockerCompose 并且配置权限
1.sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
2.sudo chmod +x /usr/local/bin/docker-compose
3.docker-compose -v
3.2 Docker-Compose 一般创建yml文件
参考:https://www.jianshu.com/p/658911a8cff3
3-1 Portainer 是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能
3-1.1 下载&安装
参考:https://blog.csdn.net/A632189007/article/details/78779920?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-78779920-blog-120851053.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-78779920-blog-120851053.pc_relevant_antiscanv2&utm_relevant_index=1
利用docker下载
docker pull docker.io/portainer/portainer
3-1.2 单机版运行
如果仅有一个docker宿主机,则可使用单机版运行
运行命令 :
docker run -d -p 9000:9000 \ #端口对应
--restart=always \ #表示在重启docker的时候,自动启动该工具
-v /var/run/docker.sock:/var/run/docker.sock \ #数据卷挂载
--name prtainer-test \ #取名为 prtainer-test
docker.io/portainer/portainer #镜像名称
3-1.3 访问方式 : http://IP:9000
3-1.4 单机版选择local即可
3-1.5 docker集群模式管理
使用Portainer+Swarm 来进行集群管理操作
1.Portainer启动 选择Remote这个模块 创建一个名称和增加一个节点
3-2 Swarm 是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(dockerclient in go, docker_py, docker等)均可以直接与Swarm通信
3-2.1 参考:https://blog.csdn.net/a632189007/article/details/78756339
3-2.2 对所有要加入集群的docker节点都进行修改配置文件的操作
添加2375端口监听 然后重启docker
3-2.3 使用docker-proxy代理服务
默认情况下,Docker引擎只侦听套接字。 我们可以重新配置引擎以使用TLS,或者您可以使用代理容器。 这是一个非常轻量级的容器,它只是将请求从TCP转发到Docker监听的Unix套接字
1.docker pull docker.io/shipyard/docker-proxy
2.启动容器
docker run -ti -d -p 2375:2375 \
--restart=always \
--hostname=$HOSTNAME \
--name shipyard-proxy \
-v /var/run/docker.sock:/var/run/docker.sock \
-e PORT=2375 \
docker.io/shipyard/docker-proxy:latest
注意:该代理服务容器也需要在每个要加入集群的docker节点上启动,同时要保证该容器的正常运行,如果容器停止则无法发现节点。
3-2.4 安装 Swarm
1.拉取镜像 docker pull docker.io/swarm
2.生成唯一token docker run --rm swarm create
3.启动Swarn Manager (Swarn Manager 只需要启动一个,所以可选取一个docker节点进行启动)
docker run -ti -d -p 2376:2375 \
--restart=always \
--name shipyard-swarm-manager \
docker.io/swarm:latest \
manage --host tcp://0.0.0.0:2375 \
token://rw4d3ac32aa6a86b341e3asd69e2cd0b
4.
5.启动Swarm Agent 将当前docker节点加入到集群中,Swarm Agent需要在每一个要加入到集群中的docker节点上启动
docker run -ti -d \
--restart=always \
--name shipyard-swarm-agent \
docker.io/swarm:latest \
join --addr [docker节点的真实ip]:2375 \
token://rw4d3ac32aa6a86b341e3asd69e2cd0b
6.可以使用命令查看docker节点情况(任意docker节点上都可以执行)
docker run --rm swarm list token://rw4d3ac32aa6a86b341e3asd69e2cd0b
7.查看docker集群详情
docker -H 10.0.11.150:2376 info
4.Harbor 是docker镜像仓库 linux环境下安装本地的镜像仓库
4.1 安装 参考地址
https://zhuanlan.zhihu.com/p/388290381
https://zhuanlan.zhihu.com/p/346499055
4.2 Harbor 设置开机启动
https://blog.csdn.net/vah101/article/details/118607465
4.3 默认登陆账号:admin 密码:Harbor12345 默认是80端口
4.4 docker 登陆到Harbor
docker login ip -u admin 回车输入密码
4.5 docker 上传镜像到本地镜像仓库
1.修改配置文件
1. 修改/etc/hosts
自己ip harbor.io #最好不要写harbor,随便定义
2. 停掉docker、docker-compose、harbor,修改/etc/docker/daemon.json,修改/harbor/harbor.cfg(有些是.yml)
[root@harbor-28 harbor]# docker-compose down -v
[root@harbor-28 harbor]# vi /etc/docker/daemon.json
{
"insecure-registries":["harbor.io"]
}
[root@harbor-28 harbor]# vi harbor.cfg
hostname= harbor.io #只修改这一项
3.重启
[root@harbor-28 harbor]# ./prepare
[root@harbor-28 harbor]# systemctl daemon-reload && systemctl restart docker
[root@harbor-28 harbor]# docker-compose up -d
2.在Harbor 网页上admin账号登陆,创建一个项目huk 这个是必须的
3.打tag包
docker tag harbor.io/huk/新的镜像名:版本
harbor.io 表示ip地址,前面配置的,也就是Harbor地址
huk是项目名称
4.docker login harbor.io -u admin 登陆输入密码
5.docker push harbor.io/huk/新的镜像名:版本
4.6 参考文档
https://blog.csdn.net/succing/article/details/122772799
5.harbor 设置自动启动 开机重启
https://blog.csdn.net/u012751272/article/details/118859114
6.linux 开放端口
https://blog.csdn.net/qq_33088807/article/details/122088273
systemctl status firewalld.service (查看防火墙开启还是关闭)
sudo firewall-cmd --list-all (可以查看端口开放情况)
firewall-cmd --zone=public --query-port=3306/tcp(查看某个端口的开放情况,返回yes或no)
1.stop firewalld.service
2.start firewalld.service
3.firewall-cmd --add-port=8080/tcp --permanent(打开8080端口、如果是mysql就打开3306端口)
4.firewall-cmd --reload
5.firewall-cmd --list-all
标签:容器,run,harbor,学习,--,镜像,docker
From: https://www.cnblogs.com/hu-kang/p/17394476.html