- 镜像命令
docker info
docker images
docker images -a
docker search xx
docker pull xx
docker rmi xx
docker rmi -f xx
docker system df
- docker的虚悬镜像:仓库名、标签都是的镜像
- 容器命令
docker run [options] images [command] [arg...]
--name 为容器指定一个名称
-d daemon 启动守护式容器(后台运行)
-i interactive 以交互模式运行容器
-t tty 为容器重新分配一个伪输入终端
it通常一起使用
-p 端口
例如 docker run -it ubuntu /bin/bash
docker ps
docker ps -a
docker ps -q
docker start xx
docker restart xx
docker stop xx
docker kill xx
docker rm xx
docker rm -f xx
docker rm -f $(docker ps -a -q)
docker logs xx
docker top xx
docker inspect xx
docker exec -it xx /bin/bash
(这样会在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止)
docker attach xx
(这样会直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止)
docker cp xx:容器内路径 目的主机路径
(export导出容器的内容流作为一个tar归档文件,import操作为export的反操作)
docker export xx>文件名.tar
cat xx.tar | docker import - 镜像用户/镜像名:镜像版本号
- 退出容器
- run 进去容器,exit退出,容器停止
- run进去容器,ctrl+p+q退出,容器不停止
- UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,对文件系统的修改作为一次提交来一层层的叠加.
好处:复用.
- docker 镜像加载原理
- bootfs (boot file system)主要包含bootloader和kernel,是docker镜像的最底层,bootloader主要引导和加载kernel,boot加载完成之后整个内核都在内存中.
- rootfs(root file system)在bootfs之上,包含典型的linux的/dev,/bin等目录和文件,rootfs就是各种不同的操作系统的发型版,比如ubuntu,centos.
- commit
apt-get update
apt-get install vim
docker commit -m="提交的描述信息" -a="作者" xx 目标镜像名:[标签名]
docker commit -m="add vim " -a="yao" fcbface5f slash/ubuntu:1.3
- push到阿里云
$ docker login --username=阿里云账号 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ruoyi-exec/mynginx:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/ruoyi-exec/mynginx:[镜像版本号]
- 搭建私服docker resitry
docker pull registry
docker run -d -p 5000:5000 -v /slash/myregistry/:/tmp/registry --privileged=true registry
curl -XGET http://ip:镜像端口(例如上面的5000)/v2/_catalog
docker tag mynginx:1.1 192.168.1.123:5000/myngnix:1.1
"registry-mirrors": [
"https://djq9mxnw.mirror.aliyuncs.com"
],
"insecure-registries":["192.168.1.123:5000"]
docker push 192.168.1.123:5000/myngnix:1.1
docker pull 192.168.1.123:5000/myngnix:1.1
- 数据卷
- docker挂载主机目录访问出现permission:denied ,可在挂载目录后加 --privileged=true
- 挂载目录后删除docker容器后不会删除挂载的数据卷
- rw:读写(默认)
- read only 只可读
docker run -it --privileged=true --volumes-from 父容器 --name 容器名 镜像
- 安装mysql
docker pull mysql:8
[client]
default-character-set=utf8mb4
[mysqld]
socket=/var/lib/mysql/mysql.sock
collation_server = utf8mb4_general_ci
character_set_server=utf8mb4
docker run -d -p 3306:3306 --privileged=true \
-v /Users/yaoqiang/app/data/mysql/log:/var/log/mysql \
-v /Users/yaoqiang/app/data/mysql/data:/var/lib/mysql \
-v /Users/yaoqiang/app/data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
--name mysql mysql:8
show variables like 'character%'
- 如果删除容器以后,重新新建容器挂载目录不变的话,数据还在
- 如果删了容器后新建启动失败,把data目录下的mysql.sock删了就行
- 安装redis
docker pull redis:6.0.8
docker run -d -p 6379:6379 --name myredis --privileged=true \
-v /Users/yaoqiang/app/data/redis/data:/data \
-v /Users/yaoqiang/app/data/redis/redis.conf:/etc/redis/redis.conf \
redis:6.0.8 \
redis-server /etc/redis/redis.conf
- 安装nginx
docker pull nginx:latest
user nginx;
worker_processes 1;
worker_rlimit_nofile 65535;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
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;
charset UTF-8;
client_max_body_size 300m;
sendfile on;
keepalive_timeout 60;
gzip on;
include /etc/nginx/conf.d/*.conf;
}
upstream distributedLock {
server 10.31.1.36:10010;
server 10.31.1.36:10086;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://distributedLock;
}
location /rewrite {
rewrite "/" http://127.0.0.1:8888/ break;
}
location /mickey.html {
root /usr/share/nginx/html/mickey;
}
}
<!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>
docker run -d -p 80:80 --privileged=true \
-v /Users/yaoqiang/app/data/nginx/html:/usr/share/nginx/html \
-v /Users/yaoqiang/app/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/yaoqiang/app/data/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /Users/yaoqiang/app/data/nginx/logs:/var/log/nginx \
--name nginx nginx
- 安装rabbitmq
docker pull rabbitmq
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 \
-v /Users/yaoqiang/app/data/rabbitmq:/var/lib/rabbitmq \
--hostname myRabbit \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq
docker exec -it 镜像ID /bin/bash
rabbitmq-plugins enable rabbitmq_management
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
docker exec -it {rabbitmq容器名称或者id} rabbitmq-plugins enable rabbitmq_management
- 安装zookeeper
docker run -d -p 2181:2181 --privileged=true \
-v /Users/yaoqiang/app/data/zookeeper/conf:/conf
-v /Users/yaoqiang/app/data/zookeeper/data:/data
--name myzookeeper zookeeper:3.7.1