docker
docker 安装
[阿里云境像服务登录不上](juejin.cn/post/695464…
-
yum 安装 gcc 相关
yum -y install gcc
yum -y install gcc-c++
-
安装需要的软件包
yum install -y yum-utils
-
设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
更新 yum 软件包索引
yum makecache fast
-
安装docker-ce
yum install docker-ce docker-ce-cli containerd.io
-
启动docker
systemctl start docker
systemctl stop docker
-
测试docker
docker version
docker run hello-world
-
自载docker
systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
配置阿里云境像
-
境像加速地址
https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors
-
配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sjflvx12.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用命令
帮助启动类命令
-
启动docker
systemctl start docker
-
停止docker
systemctl stop docker
-
重启docker
systemctl restart docker
-
查看docker状态
systemctl status docker
-
开机启动docker
systemctl enable docker
-
查看docker信息
docker info
-
查看所有命令帮助
docker --help
-
查看某个命令帮助
docker image --help
镜像命令
-
列出本地所有境像(含历史境像)
docker images -a
-
只显示境像id
docker images -q
-
查询某个境像
docker search mysql(境像名称)
-
查询前n个个境像
docker search --limit 5 mysql(境像名称)
-
拉取某个境像
docker pull mysql:latest(境像名称)
-
拉取某个版本号
docker pull mysql:6.0.8 (境像名称:[tag])
-
查看境像容器所占的空间
docker system df
-
强制删除某个容器
docker rmi -f feb5d9fea6a5(Image ID)
-
删除所有容器
docker rmi -f $(docker images -qa)
容器命令
-
使用交互式启动境像, -i:交互式, -t:终端
docker run -it ubuntu(境像名称) /bin/bash
-
以名字启动交互式境像, -it:交互式,--name:境像名称
docker run -it --name=myubuntu ubuntu(境像名称) /bin/bash
-
后台守护进程运行
docker run -d redis:6.0.8(容器名)
-
查看容器日志
docker logs 3b5d312e445d(容器id)
-
查看容器内运行进程
docker top 3b5d312e445d(容器id)
-
查看容器内部细节
docker inspect 3b5d312e445d(容器id)
-
进入正在运行的容器并以命令行交互
docker exec -it 3b5d312e445d(容器id) /bin/bash
docker attach -it 3b5d312e445d(容器id) /bin/bash
-
容器内文件烤贝到主机上
docker cp docker cp d49bf82c61ee:/home/aaa.txt(容器id:容器路径) /home
-
容器导出为tar包
docker export d49bf82c61ee(容器id) > ubuntu.tar
-
tar导入为容器
cat ubuntu.tar | docker import - ubuntu
-
apt下载软件包
apt-get update
apt-get -y install vim
-
docker commit
docker commit -m 'vim cmd add ok' -a='zhangdezhi' 199cf9ead58b(容器id) xiaozhi/ubuntu:1.3
-
登录阿里云Docker Registry
docker login --username=31429*****@qq.com registry.cn-shenzhen.aliyuncs.com
-
从Registry中拉取镜像
docker pull registry.cn-shenzhen.aliyuncs.com/xiaozhicloud/myubuntu1.3:[镜像版本号]
-
将镜像推送到Registry
$ docker push registry.cn-shenzhen.aliyuncs.com/xiaozhicloud/myubuntu1.3:[镜像版本号]
-
列出当前所有正在运行的容器
docker ps
-
列出当前所有正在运行的容器+历史运行过的
docker ps -a
-
显示最近创建的容器
docker ps -l
-
只显示容器编号
docker ps -q
-
run进容器 exit退出, 容器停止
exit
-
run进容器 ctrl+p+q退出, 容器不停止
ctrl+p+q
-
启动已停止的容器
docker start 6f7f870398f2(容器id或容器名称)
-
重启容器
docker restart 6f7f870398f2(容器id或容器名称)
-
停止容器
docker stop 6f7f870398f2(容器id或容器名称)
-
强制停止容器
docker kill 6f7f870398f2(容器id或容器名称)
-
删除停止容器
docker rm 6f7f870398f2(容器id或容器名称)
容器数据卷
-
容器数据卷存储
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /home/data:/home/data ubuntu
-
给容器添加读写权限
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /home/data:/home/data:ro ubuntu
-
给容器添加读写权限
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v --volumes-form u1 --name=u2 ubuntu
-
查看数据卷是否挂载成功
dcoker inspect ee7f32630de9(容器id)
安装常规软件的安装
-
安装tomcat
docker search tomcat
docker pull tomcat
docker run -d -p 8080:8080(端口映射) --name t1 tomcat
docker stop t1
docker rmi 容器id
-
安装mysql
docker search mysql
docker pull mysql:5.7
docker run -d -p 3306:3306 --privileged=true
-v /var/mysql/log:/var/log/mysql
-v /var/mysql/data:/var/lib/mysql
-v /var/mysql/conf.d:/var/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456
--name mysql:5.7 mysql:5.7
docker exec -it 容器id /bin/bash
mysql -uroot -p
-
安装redis
docker search redis
docker pull redis
docker run -d -p 6379:6379 --name redis --privileged=true
-v /app/redis/redis.conf:/etc/redis/redus.conf
-v /app/redis/data:/data redis redis-server
/etc/redis/redis.conf
mysql主从复制
-
启动主数据库
docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-mater/log:/var/log/mysql \
-v /mysql/mysql-mater/data:/var/lib/mysql \
-v /mydata/mysql-mater/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
宿主机新建my.conf
# 文件路径
# /mydata/mysql-mater/conf
[mysqld]
#设置server_id,同一局域网中需要唯一
server_id=101
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log_bin=mall-mysql-bin
# 设置二进制日志使用内存大小
binlog_cache_size=1M
# 设置使用的二进制日志格式
binlog_format=mixed
# 二进制日志清理时间,默认为0表示
expire_logs_days=7
# 跳过主从复制中遇到的所有错误信息
slave_skip_errors=1062
-
重启 mysql-mater
docker restart mysql-mater(容器id或容器名称)
-
创建数据同步用户
create user 'slave'@'%' IDENTIFIED BY '123456'
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
-
启动从数据库
docker run -p 3308:3306 --name mysql-slave \
-v /mydata/mysql-slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mydql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
宿主机新建my.conf
# /mydata/mysql-slave/conf
[mysqld]
#设置server_id,同一局域网中需要唯一
server_id=102
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log_bin=mall-mysql-slave1-bin
# 设置二进制日志使用内存大小
binlog_cache_size=1M
# 设置使用的二进制日志格式
binlog_format=mixed
# 二进制日志清理时间,默认为0表示
expire_logs_days=7
# 跳过主从复制中遇到的所有错误信息
slave_skip_errors=1062
#relay_log配置中继日志
relay_log=mall-mysql-relay-bin
# log_slave_updates表示slave将复制事件写进自已的二进制日志
log_slave_updates=1
# slave设置为只读(具有super权限的用户除外)
read_only=1
-
重启 mysql-slave
docker restart mysql-slave
-
进行slave数据库
docker exec -it mysql-slave /bin/bash
-
从服务器上主从复制
change master to master_host="(主服务器ip)",\
master_user="slave",\
master_password="123456",\
master_port=3307,\
master_log_file="mall-mysql-bin.000001",\
master_log_pos=154,\
master_connect_retry=30;
-
从服务器查看主从同步状态
show slave status \G;
-
从服务器开启主从复制
start slave;
Dockerfie
常用保留字指令
-
FROM 当前境像是基于那个镜像的
FROM
-
MAINTAINER 镜像的维护者
MAINTAINER
-
RUN 容器构建时需要运行的命令
RUM
-
EXPOSE 当前容器对外暴露出的端口
EXPOSE
-
WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
WORKDIR
-
USER 指定该镜像以什么样的用户去执行,如果都不指定,默认是root
USER
-
ENV 用来在构建镜像过程中设置环境变量
ENV
-
ADD 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
ADD
-
COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY
-
VOLUME 容器数据卷,用于数据保存和持久化工作
VOLUME
-
指定容器启动后的要干的事情
CMD
-
ENTRYPOINT 也是用来指定一个容器启动时要运行的命令
ENTRYPOINT
Dockerfile构建制作镜像
-
编写Dockerfile
FROM centos:7
MAINTAINER zzyy
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
-
构建镜像
docker build -t 新境像名:Tag .
docker build -t centosjava8:1.5 .
Docker网络
-
查看docker网络
docker network ls
-
查看网络源数据
docker network inspect bridge
DockerCompose
-
下载docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
给docker-compose赋权限
chmod +x /usr/local/bin/docker-compose
-
查看是否安装成功
docker-compose --version
-
启动所有docker-compose服务
docker-compose up
-
后台启动所有docker-compose服务
docker-compose up -d
-
检测docker-compose编写是否正确
docker-compose config -q
Docker轻量级可视化工具Portainer
-
安装Portainer
Portainer
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data\
portainer/portainer
Docker容器监控之 CAdvisor+InfluxDB+Granfana
-
安装CAdvisor+InfluxDB+Granfana
version: '3.1'
volumes:
grafana_data: {}
services:
influxdb:
image: tutum/influxdb
restart: always
environment:
- PRE_CREATE_DB=cadvisor
ports:
- "8083:8083"
- "8086:8086"
volumes:
- ./data/influxdb:/data
cadvisor:
image: google/cadvisor
links:
- influxdb:influxsrv
command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
restart: always
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
user: "104"
image: grafana/grafana
user: "104"
restart: always
links:
- influxdb:influxsrv
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
- INFLUXDB_NAME=cadvisor
- INFLUXDB_USER=root
- INFLUXDB_PASS=root
-
运行docker-compose
docker-compose up -d
更新内容请关注晓智科技