dockers
常用docker命令
管理命令
docker ps // 查看所有正在运行容器
docker stop containerId // containerId 是容器的ID
docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID
docker stop $(docker ps -a -q) // stop停止所有容器
docker rm $(docker ps -a -q) // remove删除所有容器
docker restart 容器id //重启容器
docker container update --restart=always 容器名字
eg:
docker run -d -p 8008:80 --name nginx-name nginx:1.1.1 //启动一个新docker实例(nginx:1.1.1是版本号)
指令ps说明 https://www.runoob.com/docker/docker-ps-command.html
指令exec说明 https://www.runoob.com/docker/docker-exec-command.html
容器状态(进阶) https://blog.csdn.net/weixin_33656238/article/details/113630124
目录端口映射
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--privileged=true 关闭安全权限,否则你容器操作文件夹没有权限
-v 挂载目录为:主机目录:容器目录,在创建前容器是没有指定目录时,docker 容器会自己创建
eg:
docker run -p 8079:80 --name nginx-test
--privileged=true
-v /testdocker/default.conf:/etc/nginx/conf.d/default.conf
-v /testdocker/html:/usr/share/nginx/html -d nginx:1.14
docker使用
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
apt-get update
apt-get install apt-transport-https ca-certificates curl
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-get install docker-ce
docker --version
docker pull redis:3.2.8
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Nov2014 --restart=always -d -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/log:/var/log/mysql -v /etc/localtime:/etc/localtime -v /usr/local/mysql/conf/my.cnf:/etc/mysql/my.cnf mysql:5.6.24
docker ps -s
docker ps -a
docker images
#####################################################################################
#进入某个容器, 并执行某个程序(这里是执行bash命令解释器)
docker exec -it mysql /bin/bash
#######################################################################################
# 创建数据卷
docker volume create --name xxx
# 挂载数据卷
docker run -v xxx:/path/in/container <container_name>
# 数据直接映射到主机目录
docker run -v yyy:/path/in/container <container_name>
#上面两种持久化容器内数据的方式,大差不差。
# 但是对于已有数据的卷或目录,默认的处理方式可能不同
# 以及数据迁移的时候,挂载到主机目录的容器内数据,可能在另一台主机上要有相同的属主或权限
# 持久化数据到 数据卷 或者 主机目录, 一来是为了方便备份和迁移。 二来,如果要在当前容器的基础上构建镜像(比如需要暴露新的端口)的时候,生成的镜像不至于太大。
Windows下一些问题处理
ro没生效的问题:https://stackoverflow.com/questions/46610256/chmod-wsl-bash-doesnt-work
To enable changing file owners & permissions, you need to edit
/etc/wsl.conf
and insert the below config options: 要启用更改文件所有者和权限,您需要编辑/etc/wsl.conf
并插入以下配置选项:automount] [options = "metadata"
Do this inside the WSL shell, potentially needing
sudo
to edit/create the file. 在 WSL shell 中执行此操作,可能需要sudo
来编辑/创建文件。This may require restarting WSL (such as with
wsl --shutdown
which is a Windows command, not one within WSL) or the host machine to take effect. This has been possible since 2018: 这可能需要重新启动 WSL(例如使用wsl --shutdown
,这是一个 Windows 命令,而不是 WSL 中的命令)或主机才能生效。自 2018 年以来,这已成为可能:You can now set the owner and group of files using chmod/chown and modify read/write/execute permissions in WSL. You can also create special files like fifos, unix sockets, and device files. 现在,您可以使用 chmod/chown 设置文件的所有者和组,并修改 WSL 中的读/写/执行权限。您还可以创建特殊文件,例如 fifo、unix 套接字和设备文件。 We’re introducing new mounting options with DrvFs for projecting permissions onto files alongside providing new Linux metadata on files and folders. 我们引入了 DrvFs 的新安装选项,用于将权限投影到文件上,同时提供有关文件和文件夹的新 Linux 元数据。
[cite: Microsoft Dev Blog] [引用:微软开发博客]
常用dockers
gitlab
docker run `
--detach `5.151.29:11080 `
--hostname 121.
--publish 11443:443 --publish 11080:11080 --publish 11022:22 `
--name gitlab `$env:GITLAB_HOME/config:/etc/gitlab `
--volume $env:GITLAB_HOME/logs:/var/log/gitlab `
--volume $env:GITLAB_HOME/data:/var/opt/gitlab `
--volume 10.2-ce.0 gitlab/gitlab-ce:13.
rabbitmq
docker run -itd --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=novabeyond rabbitmq:3-management
RabbitMQ节点绑定到端口(开放服务器TCP套接字),以接受客户端和CLI工具连接。其他进程和工具,例如SELinux,可能会阻止RabbitMQ绑定到端口。发生这种情况时,该节点将无法启动。
CLI工具,客户端库和RabbitMQ节点也可以打开连接(客户端TCP套接字)。防火墙可以防止节点和CLI工具相互通信。确保可以访问以下端口:
4369:epmd,RabbitMQ节点和CLI工具使用的对等发现服务
5672、5671:由不带TLS和带TLS的AMQP 0-9-1和1.0客户端使用
25672:用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认情况下限制为单个端口,计算为AMQP端口+ 20000)。除非确实需要这些端口上的外部连接(例如,群集使用联合身份验证或在子网外部的计算机上使用CLI工具),否则这些端口不应公开。有关详细信息,请参见网络指南。
35672-35682:由CLI工具(Erlang分发客户端端口)用于与节点进行通信,并从动态范围分配(通过服务器分发端口+ 10010计算为服务器分发端口+ 10000)。有关详细信息,请参见网络指南。
15672:HTTP API客户端,管理UI和Rabbitmqadmin (仅在启用管理插件的情况下)
61613、61614:不带TLS和带TLS的STOMP客户端(仅在启用STOMP插件的情况下)
1883、8883 :(不带和带有TLS的MQTT客户端,如果启用了MQTT插件 15674:STOMP-over-WebSockets客户端(仅在启用了Web STOMP插件的情况下)
15675:MQTT-over-WebSockets客户端(仅在启用Web MQTT插件的情况下)
15692:Prometheus指标(仅在启用Prometheus插件的情况下)
原文链接:https://blog.csdn.net/qq_37356556/article/details/104700411
docker run -itd --name rabbitmq --restart=always -p 5672:5672 -p 15672:15672 -p 5671:5671 -p 15671:15671 -p 4369:4369 -p 61613:61613 -p 61614:61614 -p 1883:1883 -p 8883:8883 -p 15674:15674 -p 15675:15675 -p 15692:15692 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=novabeyond rabbitmq:3-management
redis
docker run -itd --name redis -p 6379:6379 -v C:/data/redis/conf:/usr/local/etc/redis redis redis-server /usr/local/etc/redis/redis.conf
配置文件中注释掉 bind 127.0.0.1 添加密码行: requirepass xxxx
或者这里注释掉 -v
文件映射选项,启动后进入容器,编辑配置文件,然后重新启动
或者直接添加选项的方式:
docker run -itd --name redis --restart=always -p 6379:6379 redis --requirepass "live4dream"
mysql
5.6
docker run --name some-mysql -v /C/data/mysql/conf:/etc/mysql:ro -v /C/data/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Nov2014 -e TZ=Asia/Shanghai -d mysql:5.6
配置文件读写
docker run --name some-mysql -v /C/users/data/mysql/conf:/etc/mysql:rw -v /C/users/data/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Nov2014 -e TZ=Asia/Shanghai -d mysql:5.6
注意:windows环境docker下mysql配置文件映射路径需要放到C:\users\下(否则会报777权限的配置文件, 配置文件会被忽略), 并需要给users目录下相关文件夹加users用户组的修改权限.
8.0
docker run --name mysql8 -v /C/users/data/mysql8/conf:/etc/mysql:rw -v /C/users/data/mysql8/data/mysql:/var/lib/mysql -v /C/users/data/mysql8/data/mysql-files:/var/lib/mysql-files -p 3307:3306 -e MYSQL_ROOT_PASSWORD=Nov2014 -e TZ=Asia/Shanghai -d mysql:8.0
-- GRANT ALL ON *.* TO 'root'@'%';
-- ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
-- 使用5.x版本的密码加密套件
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Nov2014';
flush privileges;
nextcloud
docker run --name mysql8 -v /C/users/data/mysql8/conf:/etc/mysql:rw -v /C/users/data/mysql8/data/mysql:/var/lib/mysql -v /C/users/data/mysql8/data/mysql-files:/var/lib/mysql-files -p 3307:3306 -e MYSQL_ROOT_PASSWORD=Nov2014 -e TZ=Asia/Shanghai -d mysql:8.0
CREATE database nextcloud;
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
-- 使用5.x版本的密码加密套件
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Nov2014';
flush privileges;
docker network create mysql
docker run -d --restart=always -p 9001:80 -v nextcloud:/var/www/html --name nextcloud --network mysql nextcloud
jfrog
artifactory 仓库
docker run --name jfrog-oss -d -v data_artifactory:/var/opt/jfrog/artifactory -p 8081:8081 -p 8082:8082 -p 8046:8046 -p 8049:8049 -p 8070:8070 docker.bintray.io/jfrog/artifactory-oss
nexus
nexus仓库, 参考: https://hub.docker.com/r/sonatype/nexus3
docker volume create --name nexus-data
docker run -itd -p 9091:8081 --name nexus -v nexus-data:/nexus-data --restart=always sonatype/nexus3
默认用户是 admin,唯一生成的密码可以在卷中的 admin.password 文件中找到。
进入容器,查看初始密码
docker exec -it nexus /bin/bash
cat /nexus-data/admin.password
修改初始密码,左上角进入设置,
左侧点击进入repositories. 默认已经建好了 hosted,proxy, group类型的maven仓库,选择其中那个group类型的仓库(http://<domain>:<port>/repository/maven-public/
. 添加到自己的maven的settings.xml中的 repositorys中或mirror中。
左侧点击进入users。添加用户,java / java123456 , 授予 所有角色。添加到自己的maven的settings.xml中的 server中。(注意id要与前面repository或mirror的id一致)
npm仓库创建和上传
https://blog.csdn.net/wjyyhhxit/article/details/103595333 https://help.sonatype.com/repomanager2/node-packaged-modules-and-npm-registries#NodePackagedModulesandnpmRegistries-EncodingCredentialsonLinux
sqlserver
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=w12345678" -p 1433:1433 -v /C/data/mssql:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=mssql@2021" -p 1433:1433 -v /C/data/mssql/data:/var/opt/mssql/data -v /C/data/mssql/log:/var/mssql/log -v /C/data/mssql/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2019-latest
nextcloud-aio
这个失败了。。。
deprive gimmick discount hush tile revolving willed zigzagged
Initial Nextcloud username: admin
Initial Nextcloud password: 3e8a6d83c67f970b608433e698aecdd63b325ff4e238d0c4
minIO
对象存储
参考官网:https://www.minio.org.cn/docs/minio/container/index.html
mkdir -p ~/minio/data
docker run -itd \
-p 9000:9000 \
-p 19090:9090 \
--name minio \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=w784319947" \
--restart=always \
quay.io/minio/minio server /data --console-address ":9090"
Jenkins
ci/cd工具
参考:https://www.jenkins.io/zh/doc/book/installing/
个人正式服:
docker run \
-u root \
-itd \
-p 18080:8080 \
-p 50000:50000 \
-v /home/jenkins/data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins \
--restart=always \
jenkinsci/blueocean
个人学习测试服:
docker run \
-u root \
-itd \
-p 18082:8080 \
-p 50002:50000 \
-e PLUGINS_FORCE_UPGRADE=true \
-v /home/jenkins2/data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins2 \
--restart=always \
jenkinsci/blueocean
mongo
docker run -itd \
--name mongo \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=Nov2014 \
mongo --auth
bind9
dns服务
docker run -d --name bind9 -e TZ=UTC -p 10053:53 ubuntu/bind9:9.18-22.04_beta
或者
docker run -d --name bind9 -e TZ=UTC -p 53:53 -v bind9_etc:/etc/bind -v bind9_var_cache:/var/cache/bind -v bind9_var_lib:/var/lib/bind ubuntu/bind9:9.18-22.04_beta
Parameters 参数
Parameter 范围 | Description 描述 |
---|---|
-e TZ=UTC |
Timezone. 时区。 |
-p 30053:53 |
Expose bind9 on localhost:30053 . 在 localhost:30053 上公开 bind9。 |
-e BIND9_USER=bind |
The user which will start the named process. 将启动 named 进程的用户。 |
-v /path/to/bind/configuration:/etc/bind/named.conf |
Local configuration file named.conf (try this example). 本地配置文件 named.conf (试试这个例子)。 |
-v /path/to/cached/data:/var/cache/bind |
Location where locally cached data can be dumped. 可以转储本地缓存数据的位置。 |
-v /path/to/resource/records:/var/lib/bind |
Location of Resource Records defining various domain information. 定义各种域信息的资源记录的位置。 |
改为开机启动
docker update bind9 --restart always
进入容器,编辑配置文件
docker exec -it bind9 /bin/bash
#apt install vim
#cat /etc/bind/bind.conf
This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
#cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
listen-on-v6 { any; };
};
这里可以解除forwards的注释,配置为isp的dns解析器地址,或者配置为223.5.5.5或114.114.114.114等比较出名的公共dns解析器地址。
也可以不解除forwards的注释,当bind9的缓存和zones文件没有命中时,走公网13个root name server的迭代查询(国内访问根服务器ip可能已经劫持到了国家自己维护的根镜像中)
# cat /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/usr/share/dns/root.hints";
};
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
主要是根域(.) 和几个特殊地址 的 正向反向解析配置。
# cat /etc/bind/named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
目前是空的。
# cat /etc/bind/zones.rfc1918
zone "10.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };
这是几个私网网段的默认反向映射配置。微策内网用了10和172相关网段。那/etc/bind/named.conf.local
中的//include "/etc/bind/zones.rfc1918";
保持默认注释状态即可。
//todo 增加自定义正向、反向解析
//todo 增加内外网 相同域名 split解析
h2
https://hub.docker.com/r/oscarfonts/h2/
docker run -itd -p 1521:1521 -p 81:81 -v h2-data:/opt/h2-data -e H2_OPTIONS=-ifNotExists --name=h2 --restart=always oscarfonts/h2
logstash
一次性使用测试
docker run --name logstash3 --privileged=true -u root --rm -it -v C:\Users\wangjm\Desktop\elk2\pipeline\:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:8.7.1 /bin/bash
docker run --name logstash3 --privileged=true -u root -itd -v C:\Users\wangjm\Desktop\elk2\pipeline\:/usr/share/logstash/pipeline/ -p 5045:5044 docker.elastic.co/logstash/logstash:8.7.1 /bin/bash
打开的是容器内的bash,手动
bin/logstash -e 'input { stdin { } } output { stdout {} }'
filebeat
todo 目前暂未使用容器
-e
is optional and sends output to standard error instead of the configured log output. -e
是可选的,它将输出发送到标准错误而不是配置的日志输出。
发表回复