要暂停名为 “my-container” 的容器,可以运行以下命令:
docker pause my-container
暂停后,容器的所有进程将被挂起,不再执行任何操作。
要恢复暂停的容器并使其继续运行,可以使用 命令:docker unpause
docker unpause my-container
练习
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器内部端口
root@r7ftf-virtual-machine:/home# docker run -d --name nginx01 -p 3344:80 nginx
7985a27c68199d77d5629991a2bd452b16146683414fef47819b8735c510b544
root@r7ftf-virtual-machine:/home# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7985a27c6819 nginx "/docker-entrypoint.…" 15 seconds ago Up 14 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
#本机自测
root@r7ftf-virtual-machine:/home# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#进入容器
root@r7ftf-virtual-machine:/home# docker exec -it nginx01 /bin/bash
root@7985a27c6819:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
docker 来装一个tomcat
#一般用来测试,用完就删除
docker run -it --rm tomcat:9.0
#启动运行(常用)
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
root@r7ftf-virtual-machine:/home# docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0
98a1cf261c1614e743e0957b51cd8ca7130526c090579a5ff1c9db4f7f148339
#进入容器
root@r7ftf-virtual-machine:/home# docker exec -it tomcat01 /bin/bash
root@98a1cf261c16:/usr/local/tomcat# ls
BUILDING.txt README.md conf temp
CONTRIBUTING.md RELEASE-NOTES lib webapps
LICENSE RUNNING.txt logs webapps.dist
NOTICE bin native-jni-lib work
部署es + kibana
#es 暴露的端口很多!
#es 十分的耗内存
#es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置
#启动 elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=singlee-none" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
#docker stats 查看cpu状态
commit镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
容器数据卷
主机目录和容器目录是相互绑定的,以后修改在本地修改即可,容器内会自动同步!
#指定路径挂载 -v
docker run -it -v 主机目录:容器目录
root@r7ftf-virtual-machine:/home# docker run -it -v /home/cs:/home/ centos /bin/bash
[root@c2cb95334985 /]# cd home/
[root@c2cb95334985 home]# ls
cs r7ftf
[root@c2cb95334985 home]# touch test
[root@c2cb95334985 home]# ls
cs r7ftf test
[root@c2cb95334985 home]# exit
exit
root@r7ftf-virtual-machine:/home# ls
cs libteest.a max.h qrs r7ftf r7ftf.java tst
root@r7ftf-virtual-machine:/home# cd cs
root@r7ftf-virtual-machine:/home/cs# ls
cs r7ftf test
具名和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的 volume(卷) 的情况
docker volume ls
#具名挂载
-v myvolume(卷名):/app/data(容器内路径)
所有的docker容器内的卷,没有指定目录的情况下都是在'/var/lib/docker/volumes/容器名/_data'
拓展:
#通过-v容器内路径:ro rw改变读写权限
ro readonly #只读
rw readwrite#可读可写
#一旦设置了容器权限,容器就有限制了
docker run -dP --name nginx02 -v junn:/etc/nginx:ro nginx
docker run -dP --name nginx02 -v junn:/etc/nginx:rw nginx
初识DockerFile
Dockerfile 就是用来构建docker镜像文件的命令脚本通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个命令就是一层。
#创建一个dockerfile文件,名字可以随机,建议Dockerfile
#指令(大写) 参数
#测试文件内容
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "===end==="
CMD /bin/bash
#这里的每个命令,就是镜像的一层!
构建命令的形式为:
docker build -f <Dockerfile路径> -t <镜像标签> <上下文路径>
#eg
root@r7ftf-virtual-machine:/home# docker build -f ./dockerfile -t r7ftf/centos .
-f ./dockerfile:指定了用于构建定义的Dockerfile文件的路径。
-t r7ftf/centos:指定了构建完成后的镜像标签,即。r7ftf/centos
.:指定了上下文路径,这表示当前目录是构建上下文(即Docker将以此为基础构建镜像)。
数据卷容器
多个mysql同步数据
root@r7ftf-virtual-machine:/var/lib/docker/volumes# docker run -d -p 3310:3306 -v conf:/etc/mysql/conf.d/ -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql01 mysql:5.7
4a6696ad3fa6c3cb4af79cf780512984d9c9b6d7d68f909f77bd8e44a98b8168
root@r7ftf-virtual-machine:/var/lib/docker/volumes# docker run -dP -e MYSQL_ROOT_PASSWORD=12345 --name mysql02 --volumes-from mysql01 mysql:5.7
394ae05904b790939db3dc974a0c7306d62a3c6424192038cb3af704a2de0105
DockerFile
DockerFile介绍
dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像(DockerHub,阿里云镜像仓库!)
DockerFile构建过程
基础知识:
1.每个保留关键字(指令)必须都是大写字母
2.指令从上到下顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层,并提交!
DockerFile指令
FROM #指定基础镜像,即用于构建当前镜像的基础操作系统或软件环境。
MAINTAINER #指定镜像的维护者信息
LABEL #为镜像添加元数据,例如版本、作者、描述等信息。
RUN #在镜像构建过程中要执行的命令,可用于安装软件、运行脚本等。
COPY #将文件从构建环境复制到镜像中
ADD #类似于COPY,但可以自动处理URL和解压缩文件
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口
CMD #指定容器启动的时候要运行的命令,只有最后一个会生效,可被覆盖
ENTRYPOINT #与 CMD 类似但不会被命令覆盖,可追加命令
ENV #设置环境变量
在 Dockerfile 中的 指令需要使用 JSON 数组的形式来定义要执行的命令和参数。正确的格式应该是 ,使用双引号将命令和参数括起来。CMD``CMD ["ls", "-a"]
下面是正确格式的示例:
CMD ["ls", "-a"]
docker history 容器id(容器名:版本号) #查看镜像生成的过程
上传镜像到Docker Hub
docker login -u 用户名 -p 密码
docker tag 镜像 标签
docker push 镜像
要将镜像上传到 Docker Hub 或其他 Docker Registry,您需要完成以下步骤:
登录到 Docker Hub(或其他 Docker Registry)账户:使用 命令来登录到您的 Docker Hub 账户或其他 Docker Registry。docker login
bash
docker login
您将被要求输入 Docker Hub 或 Registry 的用户名和密码。确保提供正确的凭据以成功登录。
标记您要上传的镜像:使用 命令来为要上传的镜像添加一个标签。标签必须包括您的 Docker Hub 用户名(或 Registry 的 URL)加上您为镜像选择的名称。docker tag
bash
docker tag IMAGE_ID YOUR_USERNAME/IMAGE_NAME:TAG
将 替换为您要上传的镜像的实际 IMAGE ID, 替换为您在 Docker Hub(或 Registry)上的用户名, 替换为您为镜像选择的名称, 替换为适当的标签(例如:latest)。IMAGE_IDYOUR_USERNAMEIMAGE_NAMETAG
上传镜像:使用 命令将镜像推送到 Docker Hub(或 Registry)。docker push
bash
docker push YOUR_USERNAME/IMAGE_NAME:TAG
确保提供正确的用户名、镜像名称和标签。上传镜像的过程可能需要一些时间,具体取决于您的网络连接速度和镜像的大小。
上传完成后,您的镜像将在 Docker Hub(或 Registry)的仓库中可见。
Docker网络
理解Docker0
#查看容器内部网络地址
ip addr
--link
root@r7ftf-virtual-machine:/home/r7ftf# docker run -d --name tomcat02 tomcat
d4b8d34c7517726c024a00ed9358abe797fda74ac453ddb66599d6e0823d3aa1
root@r7ftf-virtual-machine:/home/r7ftf# docker run -d -P --name tomcat03 --link tomcat02 tomcat
3a6b26617601443da664bbf077d2bc5801c7dc71e597e28384af95b5933d5103
这是在 Linux 机器上执行的 Docker 命令。以下是每个命令的解释:
docker run -d --name tomcat02 tomcat:
此命令使用 tomcat 镜像创建一个名为 tomcat02 的新 Docker 容器。
-d 选项在后台运行容器(分离模式)。
--name 选项为容器分配名称 tomcat02。
docker run -d -P --name tomcat03 --link tomcat02 tomcat:
此命令使用 tomcat 镜像创建另一个名为 tomcat03 的 Docker 容器。
-d 选项在后台运行容器(分离模式)。
-P 选项将所有暴露的端口发布到主机接口的随机端口上。
--name 选项为容器分配名称 tomcat03。
--link 选项在 tomcat03 容器和 tomcat02 容器之间创建链接。
tomcat 镜像是 Apache Tomcat Web 服务器的预构建镜像。第一个命令使用此镜像创建一个新容器,并将其命名为 tomcat02。第二个命令从同样的镜像创建另一个容器,命名为 tomcat03,并将其链接到 tomcat02 容器。此链接允许 tomcat03 容器与 tomcat02 容器进行通信。-P 选项将 tomcat03 的暴露端口发布到主机机器的随机端口上,使 Web 服务器可以从 Docker 网络外部访问。
#查看docker网络
docker network ls
#查看hosts配置
root@r7ftf-virtual-machine:/home/r7ftf# docker exec -it tomcat03 cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 tomcat02 d4b8d34c7517
172.17.0.3 3a6b26617601
#--link 就是在hosts配置中增加了172.17.0.2 tomcat02 d4b8d34c7517映射
自定义网络
#查看所有的docker网络
docker network ls
root@r7ftf-virtual-machine:/home/r7ftf# docker network ls
NETWORK ID NAME DRIVER SCOPE
c5b2fce04078 bridge bridge local
e30b5814e239 host host local
0ec7bb09d4b4 none null local
网络模式
bridge:桥接 docker(默认)
none:不配置网络
host:和宿主机共享网络
container:容器内网络连通(用的少,局限很大)
#我们直接启动的命令 docker run -d -P --name tomcat01 tomcat 默认添加 --net bridge,这个就是docker0网络
等价于:
docker run -d -P --name tomcat01 --net bridge tomcat
#docker0特点:是默认的,域名不能访问, --link可以打通连接!
#自定义一个网络:
#--driver bridge (默认添加)
#--subnet 192.168.0.0/16
#--gateway 192.168.0.1 mynet
root@r7ftf-virtual-machine:/home/r7ftf# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
616e69f30340a783bbd9ca7afa4f1e5d3eeaa0042beb1c95a0a227ae7fdd18c9
root@r7ftf-virtual-machine:/home/r7ftf# docker network ls
NETWORK ID NAME DRIVER SCOPE
c5b2fce04078 bridge bridge local
e30b5814e239 host host local
616e69f30340 mynet bridge local
0ec7bb09d4b4 none null local
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
该命令将创建一个名为 mynet
的 Docker 网络,并使用 bridge
作为驱动程序。--subnet
选项指定该网络的子网为 192.168.0.0/16
,--gateway
选项指定网络的网关为 192.168.0.1
。
创建网络后,可以使用 docker network ls
命令列出所有的 Docker 网络,包括新创建的 mynet
网络。可以使用 docker network inspect mynet
命令查看 mynet
网络的详细信息,包括子网和网关等配置信息。
接下来,可以使用 --network
选项将容器连接到 mynet
网络,以便容器可以使用该网络提供的网络连接。例如:
docker run --name my-container --network mynet myimage
这样,my-container
容器就会连接到 mynet
网络,并可以使用该网络提供的网络连接。在容器内部,可以使用 ping
命令测试网络连接是否正常。例如,可以使用 ping 192.168.0.1
命令测试容器是否可以连接到网络网关。
网络连通
#docker network connect mynet tomcat01
root@r7ftf-virtual-machine:/home/r7ftf# docker network connect mynet tomcat01
这是在 Linux 机器上执行的 Docker 命令,用于将现有的容器 tomcat01 连接到名为 mynet 的 Docker 网络中。命令的语法为:
docker network connect NETWORK CONTAINER
其中,NETWORK 参数是要连接的 Docker 网络的名称,CONTAINER 参数是要连接到网络中的容器名称或 ID。
在这个例子中,执行了以下命令:
docker network connect mynet tomcat01
该命令将现有的 tomcat01 容器连接到名为 mynet 的 Docker 网络中。容器连接到网络后,可以使用网络中的其他容器或服务进行通信。
需要注意的是,容器只能连接到一个 Docker 网络中。如果要将容器连接到其他网络中,必须先将其从当前网络中断开,然后再连接到其他网络中。可以使用 docker network disconnect 命令将容器断开与网络的连接。例如,要将 tomcat01 容器从 mynet 网络中断开连接,可以执行以下命令:
docker network disconnect mynet tomcat01
这样,tomcat01 容器就会从 mynet 网络中断开连接。如果要将容器连接到其他网络中,可以使用 docker network connect 命令将其连接到其他网络中。
实战:部署Redis集群
#创建网卡
docker network create redis --subnet 172.38.0.0/16
#通过脚本创建六个redis配置
for port in $(seq 1 6);
do
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat <<EOF>/mydata/redis/none-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
这是一个 Shell 脚本示例,用于在 /mydata/redis
目录中创建六个 Redis 节点,并为每个节点创建一个配置文件 redis.conf
。每个节点都指定了不同的端口号、集群配置和 IP 地址,以便它们可以相互独立地运行。
#!/bin/bash
# 创建六个 Redis 节点
for port in $(seq 1 6);
do
# 创建节点目录和配置文件
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
# 将 Redis 配置写入文件
cat <<EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
该脚本使用循环语句创建六个 Redis 节点。在创建节点时,使用 mkdir -p
命令创建节点目录,并使用 touch
命令创建 redis.conf
配置文件。使用 cat <<EOF
命令将 Redis 配置写入配置文件,并使用 $port
变量指定节点的端口号和集群配置。
在每个节点的配置文件中,使用 port
指定节点的端口号,使用 bind 0.0.0.0
指定节点可以通过任何 IP 地址访问,使用 cluster-enabled yes
开启节点的集群功能,使用 cluster-config-file nodes.conf
指定集群配置文件的名称,使用 cluster-node-timeout 5000
指定节点在集群中的超时时间,使用 cluster-announce-ip
、cluster-announce-port
和 cluster-announce-bus-port
指定节点的 IP 地址和端口号,以便其他节点可以发现该节点。最后,使用 appendonly yes
开启 Redis 的 AOF 持久化功能,以便节点可以持久化数据。
可以将脚本保存为 create_redis_nodes.sh
文件,并使用 bash create_redis_nodes.sh
命令运行该脚本。执行脚本后,将创建六个 Redis 节点,并为每个节点创建一个配置文件 redis.conf
。每个节点都指定了不同的端口号、集群配置和 IP 地址,以便它们可以相互独立地运行。
#启动
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port}
-v /mydata/redis/node-${port}/data:/data
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
标签:容器,进阶,--,redis,r7ftf,镜像,docker,Docker From: https://www.cnblogs.com/ptm2/p/17575033.html