下载镜像
docker pull 要下载的镜像
https://hub.daocloud.io/ 在这个里面去找镜像
lg docker pull daocloud.io/library/nginx:latest (下载nginx的镜像)
查看我们下载好的镜像
docker images
一个镜像运行起来就是一个容器
镜像的一些操作
1.简单的操作
docker run 镜像的标识|镜像名称[:tag]
2.常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
-d 代表后台运行容器
-p 宿主机端口:容器端口 :为了映射当前linux的端口和容器的端口
--name 容器的名称:指定容器的名称
lg:docker run -d -p 8081:8080 --name tomcat b8(b8就是上面的那个tomcat的id的前面几个字符)
docker run -d -p 3308:3306 --name mysql -e MYSQL_ROOT_PASSWORD=admin daocloud.io/library/mysql:5.7.4
docker ps [-a , -q]
-a:查看全部的容器,包括没有运行的,
-q :之查看容器的标识
dockers logs -f 容器的id
-f:可以滚动的查看日志的最后几行
进入容器的内部
docker exec it 容器id bash
删除容器(删除容器前,需要先停止容器)
docker stop 容器id
docker stop $(docker ps -qa)
docker rm 镜像id
docker rm $(docker ps -qa )删除全部容器
举个例子啊,把linux中的文件仍到docker中的容器中
docker cp 文件名称 容器id:容器内部的路径
docker cp ssm.war fe:/usr/locat/tomcat/webapps
数据卷
上面说的这中方式我们是不去推荐使用的,我们推荐的是使用数据卷的方式,来存放我们的文件,也就是将在宿主机的一个目录映射到容器的一个目录中,可以在宿主机中操作目录中的内容,那么容器内部映射的文件也会一起改变。
1.创建数据卷
docker volume create 数据卷名称
创建好的数据卷,默认会存放在一个目录下, /var/lib/docker/volumes/数据卷名称/_data
2.查看数据卷的详细信息
docker volume inspect tomcat
3.查看全部的数据卷
docker volume ls
4.删除数据卷
docker voume rm 数据卷名称
5.应用数据卷
5.1 当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v 数据卷名称:容器内部的路径 镜像id
上面的这种方式会将容器内部自带的文件,存储在默认的存放路径中
lg:先创建一个数据卷
docker volume create vom_ssm_tomcat
docker run -d -p 8080:8080 --name ssm_tomcat -v vom_ssm_tomcat:/usr/local/tomcat/webapps b8
简单的使用之后数据卷的意思就是说我们把容器中的某一个文件夹和我们创建好的数据卷(也是一个文件夹,_data就是那个最终的映射文件)做了一个映射,
上面的那个_data就是docker为我们创建的那个映射文件
5.2 直接指定一个路径作为数据卷的存放位置。这个数据卷的路径下是空的,没有那个_data目录
docker run -v 路径:容器内部的路径 镜像id(推荐)
自定义镜像
中央创库上的镜像,也是docker的用户自己的上传过去的。。。。。。。。
说一个批量部署docker的东西 - docker-compose
先说一下啊,我是做python的目前,所以服务器上已经安装了一个pip了,现在我们就直接通过 pip安装一个docker-compose就行了:
pip3 install docker-compose
我们会在我们的pip3 list 中看到我们的docker-compose,按照网上的教程,都是安装完成之后就直接输入docker-compose就可以看到我们的信息,但是我的服务器没有反应,一直提示not found,没有找到该命令,我是一不小心的删除的时候看到我们的docker-compose的可执行文件,所以我想到,应该是我没有创建软连接,那就给我们的额docker-compose创建一个软连接就行了:ln -s /usr/local/python3/bin/docker-compose /usr/bin/docker-compose
这样输入docker-compose -version 就可以看到我们的版本号。
docker-compose.yml中的写法
version: '3.1'
services:
mysql: #服务的名称
restart: always #代表只要docker启动,那么这个容器就会启动
image: daocloud.io/library/mysql:5.7.4 #指定镜像路径
container_name : mysql #指定容器名称
ports:
- 3306:3306 #指定端口号的映射
enviroment:
MYSQL_ROOT_PASSWORD: root#指定MySQL的root用户的登录密码
TZ: Asia/Shanghai #指定时区
volumes:
-/opt/docker_mysql/mysql_data:/var/lib/mysql #映射数据卷,前者是宿主机的地址,后者是容器的地址
tomcat: #服务名称
restart: always #代表只要docker启动,那么这个容器就会启动
image: daocloud.io/library/tomcat:8.5.15-jre #指定镜像路径
container_name : tomcat #指定容器名称
ports:
- 8081:8080 #指定端口号的映射
enviroment:
TZ: Asia/Shanghai #指定时区
volumes:
-/opt/docker_mysql/tomcat_data:/usr/local/tomcat/webapps #映射数据卷,前者是宿主机的地址,后者是容器的地址
-/opt/docker_mysql/tomcat_logs:/usr/local/tomcat/logs
说一下啊,这里我们得docker-compose.yml文件可以随便放置,启动得时候,通过命令启动得了
lg:
先停止掉docker中容器,防止有旧得端口冲突呢,
docker stop $(docker ps -qa)
删除容器
docker rm $(docker ps -qa)
先随便创建一个文件,vi docker-compose.yml,复制出上面得内容
docker-compose up -d
上面执行得语句,是在我们自己创建得.yml中得那个目录下执行就行了,-d代表我们后台运行
下面得这个是我自己测试得
version: '3.1'
services:
mysql: #服务的名称
restart: always #代表只要docker启动,那么这个容器就会启动
image: daocloud.io/library/mysql:5.7.4 #指定镜像路径
container_name : mysql #指定容器名称
ports:
- 3307:3306 #指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: admin #指定MySQL的root用户的登录密码
TZ: Asia/Shanghai #指定时区
tomcat: #服务名称
restart: always #代表只要docker启动,那么这个容器就会启动
image: daocloud.io/library/tomcat:8.5.15-jre8 #指定镜像路径
container_name : tomcat #指定容器名称
ports:
- 8081:8080 #指定端口号的映射
environment:
TZ: Asia/Shanghai #指定时区
这个时候关闭我们docker-compose启动得容器就可以采用命令得方式一次全部停止
1.
关闭并且删除
docker-compose down
开启|关闭|重启 docker-compose维护得容器
docker-compose start|stop|restart
查看由docker-compose创建得容器
docker-compose ps
查看由docker-compose管理得容器得日志
docker-compose logs -f
5.不带写了上图
这样启动得时候还是之前得命令docker-compose up -d
就好了
启动完成之后,第二次启动得时候,我们就不需要上面得命令了docker-compose up --build
或者是
如果自定义得镜像不存在,会帮助我们构建出自定义得镜像,如果自定义得镜像如果存在得,会直接运行我们得自定义得镜像
重新构建得话:
(1)重新构建自定义得镜像
docker-compose build
(2)运行前重新构建
docker-compose up -d --build
work节点啊
version: '3.3'
services:
worker:
image: tikazyq/crawlab:latest
container_name: crawlab__worker
environment:
CRAWLAB_SERVER_MASTER: "N" # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
CRAWLAB_MONGO_HOST: "你的hostip地址" # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
CRAWLAB_MONGO_PORT: "你的host端口" # MongoDB port MongoDB 的端口
CRAWLAB_MONGO_DB: "master节点设置的数据库" # MongoDB database MongoDB 的数据库
CRAWLAB_MONGO_USERNAME: "用户名" # MongoDB username MongoDB 的用户名
CRAWLAB_MONGO_PASSWORD: "密码" # MongoDB password MongoDB 的密码
CRAWLAB_MONGO_AUTHSOURCE: "admin" # MongoDB auth source MongoDB 的验证源
CRAWLAB_REDIS_ADDRESS: "host的ip" # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
CRAWLAB_REDIS_PORT: "host的port" # Redis port Redis 的端口
CRAWLAB_REDIS_DATABASE: "master里配置的redis的数据库编号" # Redis database Redis 的数据库
CRAWLAB_REDIS_PASSWORD: "密码" # Redis password Redis 的密码
CRAWLAB_TASK_WORKERS: 16 # number of task executors 任务执行器个数(并行执行任务数)
CRAWLAB_SERVER_REGISTER_TYPE: "ip" # node register type 节点注册方式. 默认为 mac 地址,也可设置为 ip(防止 mac 地址冲突)
CRAWLAB_SERVER_REGISTER_IP: "192.168.0.3" # node register ip 节点注册IP. 节点唯一识别号,只有当 CRAWLAB_SERVER_REGISTER_TYPE 为 "ip" 时才生效
主节点
version: '3.3'
services:
master:
image: tikazyq/crawlab:latest
container_name: master
environment:
CRAWLAB_API_ADDRESS: "http://localhost:8000" # backend API address 后端 API 地址. 适用于 https 或者源码部署
CRAWLAB_SERVER_MASTER: "Y" # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
CRAWLAB_MONGO_HOST: "redis" # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
CRAWLAB_MONGO_PORT: "27018" # MongoDB port MongoDB 的端口
CRAWLAB_MONGO_DB: "test" # MongoDB database MongoDB 的数据库
CRAWLAB_MONGO_USERNAME: "admin" # MongoDB username MongoDB 的用户名
CRAWLAB_MONGO_PASSWORD: "密码" # MongoDB password MongoDB 的密码
CRAWLAB_MONGO_AUTHSOURCE: "admin" # MongoDB auth source MongoDB 的验证源
CRAWLAB_REDIS_ADDRESS: "redis" # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
CRAWLAB_REDIS_PORT: "6379" # Redis port Redis 的端口
CRAWLAB_REDIS_DATABASE: "1" # Redis database Redis 的数据库
CRAWLAB_REDIS_PASSWORD: "密码" # Redis password Redis 的密码
ports:
- "8080:8080" # frontend port mapping 前端端口映射
- "8000:8000" # backend
depends_on:
- mongo
- redis
# volumes:
# - "/var/crawlab/log:/var/logs/crawlab" # log persistent 日志持久化
mongo:
image: mongo:latest
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: "admin"
MONGO_INITDB_ROOT_PASSWORD: "密码"
ports:
- "27018:27017" # expose port to host machine 暴露接口到宿主机
redis:
image: redis:latest
restart: always
command: redis-server --requirepass "scrapyd123456"
ports:
- "6380:6379"