linux中docker相关基础命令

# 启动docker
systemctl start docker

# 重启dokcer
systemctl restart docker

# 开机自动启动docker
systemctl enable docker

//课件笔记:
查看服务器内核版本:uname -r
必须 3.10以上

-配置阿里云镜像加速
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0t7jgb4b.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

-查看版本信息

docker version

-显示docker系统信息包括镜像和容器数量

docker info

-帮助命令

docker [命令] --help 例:docker search --help

-镜像命令:
docker images 查看所有本地主机上的镜像
-a 列出所有镜像
-q 只显示镜像id

-搜索镜像
docker search xx 
--filter 搜索的过滤条件 例:docker search mysql --filter=STARS=3000 搜索mysql镜像的收藏大于3000的


docker pull xx[:tag] 下载镜像 【tag是指定镜像的版本,不写tag默认就是下载镜像的 latest 版本】
docker rmi -f xx 删除指定镜像,xx为镜像id
docker rmi -f xx cc vv 删除多个镜像
docker rmi -f $(docker images -aq) 删除全部镜像

-容器命令:
docker run [可选参数] image 新建容器并启动
--name="xx" 容器名字
-d 后台方式运行
-it 交互方式运行
-p 指定容器的端口(小写)
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
-P 随机指定端口 (大写)
--rm 用完就删除(一般测试的时候使用)
例:创建并进入容器:docker run -it centos /bin/bash ,进入后 exit 退出容器

exit 直接容器停止并退出
ctrl + p + q 容器不停止退出

docker ps [可选参数] 查看所有运行的容器
-a 列出当前运行的容器+历史运行过的容器
-n=? 显示最近创建的容器
-q 只显示容器的编号
docker rm xx 删除容器指定容器id,不能删除正在运行的容器,如果要强制删除 rm -f
-f $(docker ps -aq) 删除所有的容器
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器

-镜像提交
docker commit -m="提交的描述信息" -a="作者" 容器id 目的镜像名:[tag]
例:docker commit -m="测试第一个tomca01" -a="via-chen" xsadasd tomcat-cccxxx:1.0

-其他常用命令:
后台启动容器 docker run -d centos 后,docker ps 发现centos停止了,这是因为必须要有一个前台进程,否则docker会认为没有应用会自动停止

docker logs 容器id 查看日志
-tf 容器id 查看容器的所有日志
-tf --tail 条数 容器id 查看容器的指定条数日志

docker top 容器id 查看容器内部进程信息
docker inspect 容器id 查看容器元数据
docker exec -it 容器id bashShell 进入当前正在运行的容器 (开启新终端) 例:docker exec -it xxxxx /bin/bash
docker attach 容器id 进入当前正在运行的容器(正在执行的界面,不会起动新的进程)
docker cp 容器id:容器内路径 目的主机路径 从容器内拷贝文件到主机上
docker stats [容器id] 查看docker运行状态
docker history 镜像id 查看镜像的构建历史
docker tag 镜像id 新的镜像名xx:[tag] 将指定镜像标记为一个新的镜像
docker node ls 查看运行的服务

-操作1:
查询nginx镜像:docker search nginx
下载nginx镜像:docker pull nginx
运行容器:docker run -d --name nginx01 -p 3344:80 nginx
查看是否运行成功:curl localhost:3344 或者直接公网访问ip:3344是否有nginx的启动页

-数据卷相关
方式一:直接使用命令 -v 挂载
docker run -it -v /主机目录:容器目录 指定路径挂载
-v 容器内路径 匿名挂载
-v 卷名:容器内路径 具名挂载
-v 容器内路径:ro/rw ro:只读权限readonly,rw:读写权限,readwrite
只要指定了ro权限就说明这个路径只能通过宿主机来操作,容器内部无法操作
-e 环境配置
--link 容器name 两个容器网络连接(但是反向的无法连接,因为没有配置)【不推荐使用了】
例:docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=112233 --name mysql01 mysql:5.7

docker volume ls 查看所有的volume的情况
在-v挂载的时候只写容器内的目录,就会匿名挂载,
在没有指定目录的情况下都默认放在 /var/lib/docker/volumes/xxxxxxx/_data

docker volume inspect 容器卷name 查看指定卷的信息

docker run -it --name xxx2 --volumes-from xxx1 镜像名 实现两个容器数据同步

方式二:Dockerfile
使用脚本构件镜像,所有指令大写
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end-----"

CMD /bin/bash

docker build 构建成为一个镜像
例:docker build -f dockerfile文件路径 -t 镜像名:[tag] . (最后这个 . 必须!)

docker run 运行镜像
docker push 发布镜像

Dockerfile基础:
1.每个保留关键字(指令)都必须是大写字母
2.执行从上到下顺序执行
3.#标识注释
4.每一个指令都会创建提交一个新的镜像层,并提交
指令详解:
FROM #基础镜像
MAINTAINER #镜像作者,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载目录
EXPOSE #指定暴露端口
CMD #指定这个容器启动时要运行的命令,可被替代(在build后,run的时候 后面追加的命令会替换cmd)
ENTRYPOINT #指定这个容器启动时要运行的命令,可以追加(在build后,run的时候 后面追加的命令会拼接在entrypoint后面)
ONBUILD #触发指令,构建一个被继承的dockerfile使用
ENV #构建时设置环境变量

-自定义网络(容器互连)
docker run -net xxxx 配置网络 默认为 bridge 桥接模式
自定义网络,例:docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

-网络连通 (容器连接网络)
docker newtwork connect 网络 容器
例:docker network connect mynet tomcat01

-docker-compose 相关
docker-compose up 运行yml文件
--build 重新构建服务
docker-compose down 停止服务

例:docker-compose -f xxxxx.yml up -d --build 构建镜像并运行服务

配置:
version:'' #版本
services: #服务
服务1:web
#服务配置
images
build
network
......
服务2:redis
.......
服务3:redis
#其他配置 网络/卷、全局规则
volumes:
networks:
configs:

-swarm相关集群管理(集群要想可用至少3个主节点。>1台管理节点才存活,就是大多数)
docker swarm init --advertise-addr 172.x.x.x 初始化主节点
docker join --token xxxxxxxxxxxxxxxxxx 来自上面init后给出的数据或者下面join-token生成的
docker swarm join-token manager 生成一个管理节点
docker swarm join-token worker 生成一个工作节点

docker service create -P --name xxxxx mynginx nginx 启动一个服务,具有扩缩容,滚动更新。(run是启动容器不具扩缩容的)
docker service ps mynginx 查看启动的服务
docker service update --replicas 10 mynginx 更新服务(扩缩容)
docker service scale mynginx=5 动态扩缩容服务

docker stack deploy xxxx.yml 部署启动项目(集群使用,类似docker-compose单机部署)
docker secret 配置密码,证书
docker config 统一的配置

-安装php相关
docker-php-source extract | delete 存放PHP扩展源码的目录 在php容器的/usr/src/php/ext 中
docker-php-ext-enable 启动PHP扩展,使用pecl安装的扩展默认是没有启动的
docker-php-ext-install “源码包目录名” 安装并启用扩展,源码包需放在/usr/src/php/ext下,默认PHP容器是没有/usr/src/php/目录的需要docker-php-source extract来生成
docker-php-ext-configure 配合docker-php-ext-install使用,安装扩展时自定义配置

配置imap扩展
RUN apt-get update && \
apt-get install -y --no-install-recommends libc-client-dev libkrb5-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install imap

配置环境变量
ENV ORACLE_HOME=/usr/lib/oracle/12.2/client64
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
ENV LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/oracle/12.2/client64

docker安装rabbitMQ中间件
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin233 rabbitmq:3.9.10-management

爬坑纪实:

 

  1. 使用Dockerfile安装php时 记得指定:
    RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y libmcrypt-dev
    
    
    RUN docker-php-ext-install mcrypt

    这是因为我们代码里面使用的mcrypt_module_open() 需要安装mcrypt扩展库【aes加解密使用的!】否则会报错!
    先安装libmcrypt-dev扩展库再配置安装PHP的mcrypt扩展

  2. 指定apache2开启rewrite模块:
    先配置加载模块 ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
    然后去修改apache2.conf里面把 AllowOverride None 修改成 AllowOverride all
  3. 启动php-apache的镜像命令:
    docker run -d -p 8099:80 -v /home/ikugui-docker/nginx/www:/var/www/html --name php73apacheServer php73apache:1.0
  4. apache2查看模块信息(apache2 -M)报错 Config variable ${APACHE_RUN_DIR} is not defined:
    这是由于升级后apache 配置文件变化,没有导入新的apache 环境变量,运行:source /etc/apache2/envvars

 

posted @ 2022-01-13 15:06  白活  阅读(878)  评论(0)    收藏  举报