docker命令、操作、部署服务器

亲测有效:买了腾讯云,安装了centos8.0,进行docker操作
视频教学:

https://www.bilibili.com/video/BV1CJ411T7BK?p=28&spm_id_from=pageDriver&vd_source=1717654b9cbbc6a773c2092070686a95

一、docker的基本命令

二、配置数据卷

三、docker应用部署

四、Dockerfile

五、Docker Compose

六、Docker 私有仓库

七、docker和虚拟机的比较

一、docker的基本命令
cd~ 切到root目录下
docker images --查看docker镜像
docker search python --从远端仓库中寻找python
docker pull django --从远端仓库拉取django镜像
docker pull mysql:5.6 --从远端仓库拉取相应版本的mysql镜像
docker run -itd --name django1 django --使用django镜像创建django1容器
docker ps -a --查看所有容器
docker ps --查看正在运行的容器
docker exec -it django1 /bin/bash --进入django1容器的内部,每个容器相当于一个小型的linux系统,想要进入容器中,首先要启动容器。
exit() --从容器内部退出
exit --从镜像中退出
docker stop django1 --停止正在运行的容器
docker start django1 --开启关闭的容器
docker rm django1 --删除容器django1,删除容器的时候容器必须处于关闭状态
docker inspect c1 --查看容器c1的具体信息
docker rmi mysql:5.6 --删除mysql:5.6镜像,删除镜像前应该先删除由此镜像创建的容器
rm -rf mysql --删除centos系统中的文件夹
rm -f mysql --删除centos系统中的文件
systemctl start docker --启动docker
systemctl restart docker --重启docker
docker service docker stop --关闭docker
docker restart 容器名(或ID) --在容器中修改代码后,重启正在运行的容器
cd ~ 进入用户的主目录
cd / 进入根目录
cd … 进入上一层目录
服务器的防火墙添加的端口号为宿主机的端口号

首次部署项目到服务器:
1、首先将云端项目通过git clone 对应连接或者直接粘贴复制到服务器的某个文件中
2、进入文件中,使用git pull拉取文件
3、使用docker-compose up -d 在没有创建镜像和容器的时候一键部署

在后续重新修改代码部署时:
docker-compose up -d 在git pull后,需要停止容器、删容器、删镜像,然后使用这个命令自动创建镜像和容器
docker-compose up -d --build 在git pull后,需要停止容器、删容器,然后使用这个命令会自动删除镜像并重新创建镜像、容器
docker-compose down 在代码部署后,这个命令可以直接停止并删除容器
当把docker-compose.yaml文件中的网络去掉后,可以使用docker-compose up 容器名 -d

在git pull代码到最新后,进行打镜像:docker build -t 3040/topo_manage:v1.5.1 .
注意后面有一个点

然后根据打的镜像创建容器:
docker run -itd --name pipe_burst_analysis -p 18888:18888 -v /root/app/pipe_burst_analysis/logs:/usr/src/app/lf/logs
dc38e8c39f97

将文件复制到容器中替换

docker cp ./repair_new.py topo_manage_test:/usr/src/app/intel_networks/api/views

当容器的vim无法使用时,将容器中的文件复制出来服务器

docker cp topo_manage_test:/usr/src/app/intel_networks/api/views ./repair_new.py

将跳板机中的文件夹复制出来(在刚进去的服务器里面操作,不用在转到别的环境,直接在跳板机中操作)

scp -r root@xx.xx.x.xx:/app/weblogic/ ./
scp -r xx.xx.x.xx:/root/Algo/dt_resource/dtt_dg_prod/resource/scada/100_20221221_transient ./

将跳板机中的文件复制出来(在刚进去的服务器里面操作,不用在转到别的环境,直接在跳板机中操作)

scp root@xx.xx.x.xx:/root/Algo/dt_resource/dtt_dg_prod/resource/scada/100_20230108_transient/* ./
scp xx.xx.x.xx:/root/Algo/dt_resource/dtt_dg_prod/resource/scada/100_20221221_transient/scada.csv ./

将跳板机连接的两个服务器互传文件(进入其中的一个服务器,将当前文件传到另一个服务器中)

scp ./dts.tar root@xx.xx.x.xx:/tmp

实时显示docker日志的最后100行,或者不用命令直接进容器内部的log文件夹看

docker logs --tail 100 <容器名称或ID> --follow

二、配置数据卷
1、docker run -itd --name=c1 -v /root/data:/root/data_container centos:latest /bin/bash -v参数:用来设置数据卷 后面代表宿主机目录与容器目录,c1为容器的名字,centos:latest是用来创建容器的镜像
1.1、先在宿主机中的data文件下创建一个文件看看data_container中会不会同步。cd ~,切到root目录,再用ls查看是否创建成功,先进入到宿主机的data目录下,创建一个itheima.txt文件touch itheima.text,再cd data_container容器中ls查看是否有itheima.txt文件,有说明配置数据卷成功。
1.2、再在data_container中创建一个文件看看宿主机中的data中会不会同步。在data_container中新建一个a.txt,echo itcast > a.txt,ls查看一下,再查看一下里面的内容,cat a.txt,显示itcast,通过exit退回到宿主机,再切回到宿主机的data文件夹下面查看一下。
1.3、我们删去c1容器。docker rm c1,再去宿主机中的data文件夹看看是否存在c1容器中的文件。
1.4、恢复删去的c1容器。docker run -itd --name=c1 -v ~/data:/root/data_container centos:latest。查看是否存在data_container容器,docker exec -it c1 /bin/bash,再回到容器的root目录,cd ~。cd data_container,存在即成功。
2、创建一个容器挂载多个目录
docker run -itd --name=c2 -v /root/data2:/root/data2 -v /root/data3:/root/data3 centos:latest /bin/bash。这样既在宿主机的root文件夹下创建了data2和data3,而且也在c2容器中创建了data2和data3。进入c2容器docker exec -it c2 /bin/bash,但是我只想进入容器的root目录下,所以我再cd ~,这样才行,有能直接到容器的root目录下的命令?要用dockerfile才行。
3、通过两个容器挂载同一个数据卷
docker run -itd --name=c3 -v /root/data:/root/data centos:latest,刚开始我创建一个c3的容器将宿主机的data文件挂载到c3中的data文件中,进入c3容器docker exec -it c3 /bin/bash,再cd ~到容器c3的主目录下,ls查看有data文件,再cd data进入,ls查看有a.txt和itheima.text文件,说明c3容器挂载数据卷成功。再用同样的方法创建c4容器,docker run -itd --name=c4 -v /root/data:/root/data centos:latest,查看到文件即成功。我们再c4的data文件下创建一个itcast.txt文件,echo itcast > itcast.txt,再看看宿主机的data文件夹和c3容器中的data文件夹下有没有这些文件。
4、配置数据卷容器
先将之前配置的c1 c2 c3 c4容器全部删除
4.1创建c3容器的数据卷。docker run -it --name=c3 -v /volume centos:latest
4.2将c1和c2容器挂载到c3的数据卷下。docker run -it --name=c1 --volumes-from c3 centos:latest,docker run -it --name=c2 --volumes-from c3 centos:latest。用ls查看是否有volume目录。我们在c3的volume下创建一个a.txt文件,touch a.txt,看看c1和c2的volume下是否有此文件。
三、docker应用部署
1、mysql部署
1.1首先在宿主机的root目录下创建一个mysql目录,mkdir mysql,再进入mysql目录下,然后再创建一个c_mysql容器,并进行端口映射。
docker run -id
-p 3306:3306
–name=c_mysql
-v $PWD/conf:/etc/mysql/conf.d
-v $PWD/logs:/logs
-v $PWD/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
mysql:5.6
参数说明:
-p 3306:3306:将容器的3306端口映射到宿主机的3306端口
–v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器/etc/mysql/my.cnf配置目录
-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs目录日志
-v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录
-e MYSQL_ROOT_PASSWORD=123456:初始化root 用户密码
1.2进入c_mysql容器,docker exec -it c_mysql /bin/bash,再进入mysql -uroot -p123456,show databases;,create database db1;,show databases;,use db1;。为啥用navicate连不上?可以了,得在服务器的防火墙添加规则那加一个3306端口。
在拉取完镜像后,使用该命令直接创建mysql容器

docker run -d -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name  mysql mysql:5.6

2、Tomcat部署
2.1搜索Tomcat 镜像
docker search tomcat
2.2拉取mysql镜像
docker pull tomcat
2.3创建容器,设置端口映射、目录映射
首先在宿主机的root目录下创建一个tomcat目录,mkdir tomcat,再进入tomcat目录下,然后再创建一个c_tomcat容器,并进行端口映射。

docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

在tomcat目录下创建一个test文件,mkdir test,cd test,写入index.html,vim index.html,按i键入,输入<h1> hello nginx docker </h1>,按esc健,输入:wq,按回车。在服务器的防火墙添加规则那加一个8080端口,去网站上输入网址49.234.9.240:8080/test/index.html,成功显示hello tomcat docker。
3、nginx部署
3.1搜索nginx 镜像
docker search nginx
3.2拉取nginx镜像
docker pull nginx
3.3创建容器,设置端口映射、目录映射
#在/root目录下创建nginx目录用于存储nginx数据信息
mkdir nginx
cd nginx
mkdir conf
cd conf
#在~/nginx/conf/下创建nginx.conf文件
vim nginx.conf
粘贴以下代码:

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
}
http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;
sendfile        on;
#tcp_nopush     on;
keepalive_timeout  65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}

cd…,再回到nginx目录下进行端口映射、目录映射

docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

参数说明:
-p 80:80:将容器的80端口映射到宿主机的80端口
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
-v $PWD/html:/usr/share/nginx/html:将主机当前目录挂载到容器的/val/log/nginx日志目录
cd html,写入index.html,vim index.html,按i键入,输入<h1> hello nginx docker </h1>,按esc健,输入:wq,按回车。去网站上输入网址49.234.9.240,成功显示hello nginx docker。
4、Redis部署
4.1搜索redis 镜像
docker search redis
4.2拉取redis 镜像
docker pull redis:5.0
4.3创建容器,设置端口映射、目录映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
4.4使用外部机器连接redis
redis-cli.exe -h 192.168.187.129 -p 6379
四、Dockerfile
1、概念:
Dockerfile 是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员,可以为开发团队提供一个完全一致的开发环境
对于测试人员,可以直接拿开发时所构建的镜像或者通过Dockerfile 文件构建一个新的镜像开始工作了
对于运维人员,在部署时,可以实现应用的无缝移植
2、Dockerfile 关键字
在这里插入图片描述
Dockerfile指令说明简洁版:
FROM
构建镜像基于哪个镜像
MAINTAINER
镜像维护者姓名或邮箱地址
RUN
构建镜像时运行的指令
CMD
运行容器时执行的shell环境
VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器
USER
为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR
为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH
健康检查
ARG
构建时指定的一些参数
EXPOSE
声明容器的服务端口(仅仅是声明)
ENV
设置容器环境变量
ADD
拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY
拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT
运行容器时执行的shell命令
3、案例
3.1需求:
​自定义CentOS7镜像。要求:
默认登录路径为/usr
可以使用vim
3.2实现步骤:
定义父镜像:FROM centos:7
定义作者信息:MAINTAINER crisp077 <www.crisp077.xyz>
执行安装vim命令:RUN yum install -y vim
定义默认的工作目录:WORKDIR /usr
定义容器启动执行的命令:CMD /bin/bash
3.3创建使用dockerfile的镜像:
docker build -f ./centos_dockerfile -t itheima_centos:1 .
实例:
首先,拉取centos:7镜像,docker pull centos:7,拿它创建一个c4的容器,docker run -it --name=c4 centos:7,进入到root目录,cd ~,vi a.txt,我们目前只能这么操作,接下来我们自己制作一个itheima_centos:1的镜像,默认登录路径为/usr,还可以使用vim。
回到宿主机的根目录,用exit退出,创建docker-files文件,mkdir docker-files,cd docker-files,vim centos_dockerfile,写入

FROM centos:7
MAINTAINER itheima <itheima@itcast.cn>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

按esc健,输入:wq,按回车。docker build -f ./centos_dockerfile -t itheima_centos:1 .。输入docker images查看镜像,发现已经创建了itheima_centos:7镜像,通过此镜像来创建c5容器,docker run -it --name=c5 itheima_centos:1,发现默认登录路径为usr,我们在cd ~到其根目录,输入vim a.txt,按esc健,输入:wq,按回车。发现该容器可以使用vim,之前的那个c4容器就无法使用vim。
五、Docker Compose
1、Dockers Compose 概述
Docker Compose 是一个编排多容器分布式部署的工具,提供命令集管理器化应用的完整开发期,包括服务构建,启动和停止。使用步骤:
(1)利用 Dockerfile 定义运行环境镜像
(2)使用 docker-compose.yml 定义组成应用的各服务
(3)运行 docker-compose up 启动应用
(4)运行 docker-compose up -d 启动应用,后台运行中
2、安装Docker Compose
#Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -v
3、案例
3.1 创建docker-compose目录
mkdir docker-compose,cd docker-compose,vim docker-compose.yml
3.2 编写docker-compose.yml文件

version: '3'
services:
nginx:
iamge: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"

在创建./nginx/conf.d目录,mkdir -p ./nginx/conf.d,cd ./nginx/conf.d,vim itheima.conf,编写itheima.conf文件

server {
listen 80;
acess_log off;
location / {
proxy_pass https://app:8080;
}
}

退到docker-compose文件目录下,cd …/…/,使用docker-compose up启动容器。
六、Docker 私有仓库
1、私有仓库搭建
1.1、拉取私有仓库镜像
docker pull registry
1.2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
1.3、打开浏览器,输入地址
http://私有仓库服务器ip:5000/v2/_catalog,在服务器的防火墙加一个5000端口,看到{“repositories”:[]}表示私有仓库搭建成功
1.4、修改deamon.json
vim /etc/docker/daemon.json
#在上述文件中添加一个key,保存退出。
#此步用于让docker信任私有仓库地址
#注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{“insecure-registries”: [“49.234.9.240:5000”]}
1.5、重启docker 服务
systemctl restart docker
docker start registry
2、上传镜像到私有仓库
2.1、标记镜像为私有仓库的镜像
docker tag centos:7 49.234.9.240:5000/centos:7
2.2、上传标记的镜像
docker push 49.234.9.240:5000/centos:7
3、从私有仓库拉取镜像
先将49.234.9.240:5000/centos:7的镜像删除,docker rmi 49.234.9.240:5000/centos:7
#拉取镜像
docker pull 49.234.9.240:5000/centos:7
再用docker images一看镜像49.234.9.240:5000/centos:7又回来了。
七、docker和虚拟机的比较
容器就是将软件打包成标准化单元,以用于开发、交付和部署
容器镜像是轻量级的、可执行的独立软件包,包含软件运行所需要的所有内容:代码、运行时环境、系统工具、系统库和设置
容器化软件在任何环境中都能够始终如一地运行
容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突
相同:
容器和虚拟机具有相似的资源隔离和分配优势
不同:
容器虚拟化的是操作系统,虚拟机虚拟化的时硬件
传统的虚拟机可以运行不同的操作系统,容器只能运行同一类型的操作系统
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在多个服务器部署 Docker,可以按照以下步骤进行操作: 1. 在每个服务器上安装 Docker:根据服务器操作系统,按照官方文档的指引安装 Docker。 2. 配置 Docker Swarm:Docker Swarm 是 Docker 的集群管理工具,用于在多个服务器上管理和编排容器。在其中一个服务器上初始化 Swarm,成为 Swarm Manager。使用以下命令初始化 Swarm: ``` $ docker swarm init ``` 这将生成一个令牌,用于将其他服务器加入 Swarm。 3. 加入其他服务器到 Swarm:在其他服务器上使用生成的令牌加入 Swarm。使用以下命令: ``` $ docker swarm join --token <token> <manager-ip>:<manager-port> ``` `<token>` 是在初始化 Swarm 时生成的令牌,`<manager-ip>` 和 `<manager-port>` 是 Swarm Manager 的 IP 地址和端口。 4. 部署服务:创建一个服务并在 Swarm 中部署。使用以下命令: ``` $ docker service create --replicas <replicas> --name <service-name> <image-name> ``` `<replicas>` 是要创建的容器副本数量,`<service-name>` 是服务的名称,`<image-name>` 是要部署Docker 镜像。 这将在 Swarm 中的多个服务器上启动指定数量的容器副本。 5. 监视和扩展服务:使用以下命令来监视和扩展服务: ``` $ docker service ls $ docker service scale <service-name>=<replicas> ``` 第一个命令将显示当前运行的服务列表,第二个命令将扩展或缩小服务的容器副本数量。 这样,你就可以在多个服务器上使用 Docker 进行部署了。请注意,这只是一个基本的示例,你还可以进一步探索 Docker Swarm 的功能以满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值