docker 笔记
程序员文章站
2022-08-08 18:18:33
整理一下 docker 的笔记。内容不多,便于速查。 docker 只是容器,并非虚拟机,很大程度上还得依赖宿主OS。 比如:镜像 microsoft/dotnet-framework就不能在Linux下运行,拉取时会有相应的提示。 相对来说,运行在Linux环境则稳定/高效,对Windows环境不 ......
整理一下 docker 的笔记。内容不多,便于速查。
docker 只是容器,并非虚拟机,很大程度上还得依赖宿主os。
比如:镜像 microsoft/dotnet-framework就不能在linux下运行,拉取时会有相应的提示。
相对来说,运行在linux环境则稳定/高效,对windows环境不太好。并且windows需要开启 vt-x 或amd-v 指令才能使用。
1. 安装 (centos 7)
# 1. 检查有无安装docker yum list installed |grep docker # 2. 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 添加软件源信息 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 4. 更新 yum 缓存 yum makecache fast # 5. 安装docker yum -y install docker-ce # 6. 启动 systemctl start docker # 7. 检查进程 ps -ef |grep docker # 鉴于国内网络问题,后续拉取 docker 镜像缓慢,需要配置加速器,使用网易的镜像地址:http://hub-mirror.c.163.com # 新版的 docker 使用 /etc/docker/daemon.json(linux)或者 %programdata%\docker\config\daemon.json(windows)来配置 # 在配置文件中加入(没有该文件的话,请先建一个):
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
# 删除 docker ce yum remove docker-ce rm -rf /var/lib/docker
2. 容器与镜像
## 容器与镜像的关系,好比编程中“对象”与“类”的关系 # ------------------------ docker cmd ---------------------------------- # 内部命令很多情况下,操作id或names都是一样的 docker # 获取帮助 docker run hello-world # 拉取并启动镜像 docker image ls # 本地镜像 docker images # 本地镜像 docker pull training/webapp # 拉取某镜像 docker search redis # 搜索镜像 official [ok] 为官方版本 docker pull ubuntu:13.10 # pull 或 run 也可以指定tag版本 # 使用镜像创建容器 docker run -d -p training/webapp python app.py # -d:让容器在后台运行。 # -p:将容器内部网络端口映射到主机随机端口上 docker ps # 是否有容器在运行 # ports 0.0.0.0:32768->5000/tcp 表示外部32768映射到容器内5000端口 # 也可以通过 -p 参数来指定ip和端口 docker run -d -p 5000:5000 training/webapp python app.py docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py # 随机生成容器名称。也可以 --name 指定名称 docker run -d -p 6379:6379 --name my_redis redis # 可通过id或名称查看端口 docker port 98a243b215c7 docker port determined_bhabha docker logs -f 98a243b215c7 # 应用程序日志 docker top 98a243b215c7 # 容器的进程 docker inspect determined_bhabha # 容器配置和状态 docker stop determined_bhabha # 停止应用容器 docker stop 98a243b215c7 # 或 docker ps -l # 查询最后一次创建的容器 docker start 98a243b215c7 # 再次启动容器 docker restart 98a243b215c7 # 重启容器 docker rm 98a243b215c7 # 删除容器 必须先stop docker rmi 6fae60ef3446 # 删镜像 必先删对应容器,且只能用id
3. 几个应用示例:
##------------------------ docker redis -------------------------------- docker search redis docker pull redis:3.2 docker images docker run -p 6379:6379 -v /rdsdata:/data -d redis:3.2 redis-server --appendonly yes # -v /rdsdata:/data : 将主机中/rdsdata挂载到容器的/data # redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置 docker exec -it 6aa89bf8343a redis-cli # 进入redis cli > info > config get * ##------------------------ docker nginx -------------------------------- # 1. 拉取并测试启动 docker pull nginx docker run --name dk_nginx -p 80:80 -d nginx # 2. 创建映射目录 mkdir -p /nxdata/logs /nxdata/conf /nxdata/www # www: 目录将映射为 nginx 容器配置的虚拟目录。 # logs: 目录将映射为 nginx 容器的日志目录。 # conf: 目录里的配置文件将映射为 nginx 容器的配置文件。 # 3. 编辑并保存配置文件 docker ps docker cp dk_nginx:/etc/nginx/nginx.conf /nxdata/conf/ # 拷贝容器内 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; } # 4. 重新部署 docker stop dk_nginx docker rm dk_nginx # 停止并删除旧容器 docker run -d -p 80:80 --name mynginx -v /nxdata/www:/usr/share/nginx/html \ -v /nxdata/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /nxdata/logs:/var/log/nginx nginx # -v /nxdata/www:/usr/share/nginx/html 将创建的 www 目录挂载到容器的 /usr/share/nginx/html # -v /nxdata/conf/nginx.conf:/etc/nginx/nginx.conf 将创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf # -v /nxdata/logs:/var/log/nginx 将创建的 logs 挂载到容器的 /var/log/nginx # 5. 在 /nxdata/www 下放入index.html文件后,浏览器访问测试 docker kill -s hup mynginx # 重新载入 nginx (status 不变) docker restart mynginx # 重启 nginx 容器 (status 重新开始) # ------------------------- docker php --------------------------------- # 1. 拉取镜像 docker pull php:5.6-fpm # 2. 先启动 php-fpm docker run --name myphp -d -v /nxdata/www:/var/www/html:ro php:5.6-fpm # /nxdata/www是本地 php 文件的存储目录,/var/www/html是容器内 php文件目录,ro 表只读 # 3. 添加本地配置文件/nxdata/conf/conf.d/default.conf 内容如下: server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param script_filename /var/www/html/$fastcgi_script_name; include fastcgi_params; } } # 4. 启动nginx并连接php docker run --name mynginx -p 81:80 -d \ -v /nxdata/www:/usr/share/nginx/html:ro \ -v /nxdata/conf/conf.d:/etc/nginx/conf.d:ro \ --link myphp:php nginx # --link myphp:php 把 myphp 的网络并入mynginx , 并通过修改 mynginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm # 5. 添加/nxdata/www/index.php文件并测试访问 http://host:81/ <?php phpinfo(); # ------------------------- docker mariadb ------------------------------- docker pull mariadb:5.5.64 # tag可以在hub.docker.com中点击项目后查看 # 1. 创建本地映射目录 mkdir -p /nxdata/mariadb/data /nxdata/mariadb/logs /nxdata/mariadb/conf # 2. 配置文件 /nxdata/mariadb/conf/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 innodb_file_per_table=1 innodb_buffer_pool_size = 1g [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid !includedir /etc/my.cnf.d # 3. 启动容器 docker run -p 3306:3306 --name maria -v /nxdata/mariadb/conf:/etc/mysql/conf.d \ -v /nxdata/mariadb/logs:/logs -v /nxdata/mariadb/data:/data \ -e mysql_root_password=123456 -d --link myphp mariadb:5.5.64 # -v /nxdata/mariadb/conf:/etc/mysql/conf.d 挂载配置文件(容器中路径不对则不生效) # -e mysql_root_password=123456 初始化 root 用户的密码 # 4. 使用cli连接 也可以使用工具连接(如navicat) docker run -it --link maria:mariadb mariadb:5.5.64 sh -c 'exec mysql -hmaria -p3306 -uroot -p123456' # --link 连接到容器maria并命名为mariadb 后跟镜像名 # sh -c 用来执行命令 # 测试sql命令:show variables like '%per_table%'; show databases; # 如果需要,也可以安装使用 phpmyadmin docker run --name myadmin -d --link maria:db -p 82:80 phpmyadmin/phpmyadmin # 测试访问 http://host:82/ # ------------------------ docker mongodb ------------------------------ docker search mongo docker pull mongo # 目录如果没有会自动创建 docker run -p 27017:27017 -v /nxdata/mongodb:/data/db -d mongo docker run -it mongo mongo --host 172.17.0.1 # shell