docker入门笔记(基础版)

  1. 镜像命令
# 查看docker概要信息
docker info
# 列出本地主机上的镜像
docker images
docker images -a
# 查看远程库的镜像
docker search xx
# 下载镜像`在这里插入代码片`
docker pull xx
docker rmi xx
docker rmi -f xx
# 查看镜像/容器/数据卷所占的空间
docker system df
  1. docker的虚悬镜像:仓库名、标签都是的镜像
  2. 容器命令
# 新建+启动容器
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 - 镜像用户/镜像名:镜像版本号	
  1. 退出容器
  • run 进去容器,exit退出,容器停止
  • run进去容器,ctrl+p+q退出,容器不停止
  1. UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,对文件系统的修改作为一次提交来一层层的叠加.
    好处:复用.
  2. docker 镜像加载原理
  • bootfs (boot file system)主要包含bootloader和kernel,是docker镜像的最底层,bootloader主要引导和加载kernel,boot加载完成之后整个内核都在内存中.
  • rootfs(root file system)在bootfs之上,包含典型的linux的/dev,/bin等目录和文件,rootfs就是各种不同的操作系统的发型版,比如ubuntu,centos.
  1. commit
# 更新包管理工具
apt-get update
# 安装vim
apt-get install vim
# commit 新镜像
docker commit -m="提交的描述信息" -a="作者" xx 目标镜像名:[标签名]
# 例如
docker commit -m="add vim " -a="yao" fcbface5f slash/ubuntu:1.3
  1. 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:[镜像版本号]
  1. 搭建私服docker resitry
# 下载registry
docker pull registry
# run
docker run -d -p 5000:5000 -v /slash/myregistry/:/tmp/registry --privileged=true registry
# curl验证私服库上有什么镜像(ip为docker的机器的ip)
curl -XGET http://ip:镜像端口(例如上面的5000)/v2/_catalog
# 将docker images改为符合私服的名称规范,例如:
docker tag mynginx:1.1 192.168.1.123:5000/myngnix:1.1
# docker 默认不允许http方式推送镜像,通过配置取消这个限制,就是更改docker这个软件的配置,例如
  "registry-mirrors": [
    "https://djq9mxnw.mirror.aliyuncs.com"
  ],
# 只增加下面这一行即可
  "insecure-registries":["192.168.1.123:5000"]
# 若不生效可重启docker
# push镜像到私服
docker push 192.168.1.123:5000/myngnix:1.1
docker pull 192.168.1.123:5000/myngnix:1.1
  1. 数据卷
  • docker挂载主机目录访问出现permission:denied ,可在挂载目录后加 --privileged=true
  • 挂载目录后删除docker容器后不会删除挂载的数据卷
  • rw:读写(默认)
  • read only 只可读
# 容器卷的继承和共享(父容器就是之前启动过的容器,不管它现在是否在运行都可以继承)
docker run -it --privileged=true --volumes-from 父容器 --name 容器名 镜像
  1. 安装mysql
# 我电脑是苹果arm架构的芯,所以只能装8
docker pull mysql:8
# 在conf文件夹下新建my.cnf文件,目的是统一编码,内容如下
[client]
default-character-set=utf8mb4
[mysqld]
socket=/var/lib/mysql/mysql.sock
collation_server = utf8mb4_general_ci
character_set_server=utf8mb4

#运行docker
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
# 查看mysql编码
show variables like 'character%'
  • 如果删除容器以后,重新新建容器挂载目录不变的话,数据还在
  • 如果删了容器后新建启动失败,把data目录下的mysql.sock删了就行
  1. 安装redis
# 拉镜像
docker pull redis:6.0.8
# 主机新建文件夹data和文件redis.conf,redis.conf的内容去官网下载后粘进去
# 启动redis
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
  1. 安装nginx
# 拉镜像
docker pull nginx:latest
  • 建好文件夹和各种文件
# nginx.conf内容如下
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;
    #tcp_nopush     on;

    keepalive_timeout  60;

    gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
# default.conf内容如下
#upstream sisafezuul {
#        server 192.168.11.4:8080 max_fails=2 fail_timeout=30s;
#}

#server {
#        listen 80;
#        server_name sietsafe.ecej.com; 
#        client_max_body_size 10M;
#        rewrite ^(.*)$  https://$host$1 permanent;
#}

 #server {
 #       listen       443 ssl;
 #       server_name etsafeadm.guizhou001.cn;
 #
 #       ssl_certificate cert/etsafeadm.guizhou001.cn.pem;
 #       ssl_certificate_key cert/etsafeadm.guizhou001.cn.key;

 #       ssl_session_cache    shared:SSL:1m;
 #       ssl_session_timeout  5m;
 #
 #       ssl_ciphers  HIGH:!aNULL:!MD5;
 #       ssl_prefer_server_ciphers  on;
 #       location ~* /openapi {
 #            proxy_pass   http://127.0.0.1:9999;
 #       }
 #       location ~* /safety {
 #            proxy_pass   http://127.0.0.1:9999;
 #       }
 #       location / {
 #           root  website/console;
 #           index index.html;
 #       }
 #   }

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;
    }

    #location ~* .(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css|eot|svg|ttf|woff)$ {
    #   index index.htm index.html;
    #   root /data/nfsdata/website/official;
    #}

    #location / {
    #    index index.htm index.html index.jsp;
    #    proxy_pass http://sisafezuul;
    #}

    #location / {
    #   root   /usr/share/nginx/html;
    #   index  index.html index.htm;
    #}

}
# html文件夹下新建 index.html,内容如下
<!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
  1. 安装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 management管理插件
rabbitmq-plugins enable rabbitmq_management
# 主机访问 http://localhost:15672
# 发现totals和channel看不了,进入镜像
cd  /etc/rabbitmq/conf.d/
# 把这个文件的true改为false,因为没有vim,所以用echo
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
# 退出容器,执行
docker exec -it {rabbitmq容器名称或者id} rabbitmq-plugins enable rabbitmq_management
# restart容器
  1. 安装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
  1. 安装nacos

先拉取“zhusaidong/nacos-server-m1:2.0.3”镜像,然后执行

docker run -d -p 8848:8848 \
--privileged=true \
--env MODE=standalone  \
--name nacos  zhusaidong/nacos-server-m1:2.0.3
  1. 按照seata
    先拉取“apache/seata-server:latest”镜像,然后执行
docker run -d --privileged=true \
--name seata-server -p 8091:8091 \
-p 7091:7091 apache/seata-server
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值