docker docker基础教程 发表于 2022-01-11 浏览量 530 没有评论 # 安装Docker CE社区版本 ``` yum remove docker-common cd /etc/yum.repos.d/ wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum -y install docker-ce docker version docker info ``` # Docker启动 ``` systemctl enable docker #开机启动 systemctl restart docker #启动Docker docker version #验证安装,查看版本 ``` # Docker仓库的配置 ``` vim /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror.c.163.com/"] } systemctl restart docker ``` # 简单使用 ``` docker pull hub-mirror.c.163.com/library/centos:7 # 下载镜像 docker images # 查看本地镜像 docker tag hub-mirror.c.163.com/library/centos:7 centos:7 #重命名 docker save hub-mirror.c.163.com/library/centos:7 >/tmp/centos.tar #导出镜像 docker rmi centos:7 #删除镜像 docker load < /tmp/centos7.tar #镜像导入 docker run -it centos:7 /bin/bash # i表示交互式,t表示打开一个Shell窗口 docker ps #查看运行的容器。 docker ps -a #查看所有容器 docker inspect #查看容器详细信息,run起来后不会显示作者信息。 docker logs #查看容器日志 docker rm #删除容器,-f 强制删除容器 docker stop xxx # 停止容器 docker start xxx # 启动容器 ``` # 启动一个后台的docker 如果没有永久运行的程序,终端一退出容器就会马上退出 容器永久运行的条件:需要有永久运行的程序,并且使用run -d后台启动容器 ``` docker run -d centos:7 /bin/bash -c "while true;do echo ouge; sleep 5; done" # 启动后台容器 docker exec -it xxx /bin/bash # 进入后台容器 ``` # 基于commit制作镜像 ``` docker run -it centos /bin/bash # 进入容器 yum install net-tools -y # 安装软件 vi /usr/bin/ougerun # 编写脚本 while true;do echo ouge sleep 5 done docker commit xx centos:ifconfig # 生成新的镜像,如果没有指定tag,默认使用latest ``` # 基于dockerfile制作镜像 - Dockerfile使用说明 ``` FROM #基于哪个基础镜像 MAINTAINER #代表维护者信息 COPY #往镜像里添加文件 RUN #运行命令构建镜像 ENTRYPOINT #镜像启动时运行的命令,不可替换 CMD #镜像启动时运行的命令,可替换 ``` - Dockerfile配置文件实战:/docker/yum163/Dockerfile ``` FROM centos:7 MAINTAINER ouge 361589194@qq.com COPY CentOS-Base.repo /etc/yum.repos.d/ # CentOS-Base.repo文件要在本地 RUN yum -y install net-tools docker build -t centos7:163 /docker/yum163/ # 制作 docker run -it centos7:163 /bin/bash # 测试是否制作成功 ``` # Dockerfile构建nginx镜像 - Nginx安装脚本/docker/nginx/install.sh ``` yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel cd /usr/local/src wget 'http://nginx.org/download/nginx-1.14.2.tar.gz' tar -zxf nginx-1.14.2.tar.gz cd nginx-1.14.2 ./configure --prefix=/usr/local/nginx && make && make install \rm -rf /usr/local/src/* ``` - nginx启动方式 默认nginx以daemon的方式启动,无永久运行的程序,容器会马上退出:/usr/local/nginx/sbin/nginx Nginx使用永久运行的方式:/usr/local/nginx/sbin/nginx -g "daemon off;" ``` Dockerfile文件/docker/nginx/Dockerfile FROM centos7:163 COPY install.sh /tmp/install.sh RUN sh /tmp/install.sh COPY sjgrun /usr/bin/sjgrun ENTRYPOINT ["sjgrun"] ``` - 编写启动脚本sjgrun,加执行权限 ``` #!/bin/bash /usr/local/nginx/sbin/nginx -g "daemon off;" ``` - 制作Nginx镜像 ``` docker build -t ouge:nginx /docker/nginx/ docker inspect ouge:nginx ``` # Dockerfile构建Redis镜像 - Redis安装脚本/docker/redis/install.sh ``` yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake cd /usr/local/src wget 'http://download.redis.io/releases/redis-4.0.9.tar.gz' tar -zxf redis-4.0.9.tar.gz cd redis-4.0.9 make && make PREFIX=/usr/local/redis install mkdir -pv /usr/local/redis/conf/ cp redis.conf /usr/local/redis/conf/ \rm -rf /usr/local/src/* ``` - Redis镜像制作配置文件/docker/redis/Dockerfile ``` FROM centos7:163 COPY install.sh /tmp/install.sh RUN sh /tmp/install.sh COPY sjgrun /usr/bin/sjgrun CMD ["sjgrun"] ``` - 编写启动脚本/docker/redis/sjgrun,加执行权限 ``` #!/bin/bash /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ``` - 构建Redis镜像 ``` docker build -t ouge:redis /docker/redis/ docker exec -it xxx /bin/bash /usr/local/redis/bin/redis-cli ``` 构建多个服务成一个镜像就在基础脚本上加就好了。 # Docker网络模式 ``` docker network ls # 查看网络方式 uridge模式 #让容器跟docker0网卡桥接,通过nat上网 host模式 #让容器和宿主机共享网络 none #关闭容器网 yum install bridge-utils -y #网桥工具可以看具体的桥接 brctl show ``` - 桥接docker0加端口映射可以实现跟外界通讯 ``` docker run -d -p 8080:80 ouge:nginx docker run -d -p 192.168.237.50:8080:80 ouge:nginx docker run -d -p 8080:80 -p 6381:6379 ouge:web #多端口映射 ``` - 使用host模式,直接使用宿主机的网络,可直接外界通讯 ``` docker run --net=host -d ouge:web # 直接就能外网通讯 运行ifconfig查看网卡信息 ``` - 使用none模式,关闭容器网络,用得比较少 ``` docker run --net=none -d ouge:web # 只有127.0.0.1网卡 ``` # Docker文件共享 ``` mkdir -pv /ouge/logs /ouge/apps docker run --net=host -d -v /ouge/logs:/usr/local/nginx/logs -v /ouge/apps:/usr/local/nginx/html/apps ouge:nginx # -v 映射目录,删除容器时不会把映射的文件夹删除。 ``` # Docker特权指令 - 有时候要用到一些容器特殊的指令 ``` route del default gw 172.17.0.1 SIOCDELRT: Operation not permitted docker run --privileged=true -d ouge:nginx # --privileged=true开启特权 ``` # Docker-compose操作容器 - Docker-compose安装 ``` curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version ``` - 配置文件 ``` /docker/compose/redis/docker-compose.yml version: '2' services: redis: image: ouge:redis ``` - 操作命令 ``` docker-compose up -d #后台启动容器 docker-compose ps #查看容器 docker-compose down #停止并删除容器 docker-compose stop; docker-compose start #停止启动容器 docker-compose exec xxx /bin/bash # 进入容器 #需要在配置文件所在的目录下执行命令!! ``` - 映射端口跟目录 ``` version: '2' services: nginx: image: ouge:nginx ports: - "8080:80" - "9090:80" volumes: - /ouge/logs:/usr/local/nginx/logs ``` - compose同个镜像启动多个容器 ``` docker-compose up -d --scale redis=3 # 启动三个 docker-compose exec --index=2 redis bash # --index 选择进入的容器 ``` # Harbor镜像仓库搭建 - 需要安装docker,docker-compose [Harbor离线版下载地址offline](https://github.com/goharbor/harbor/releases) ``` tar xf harbor-offline-installer-v2.3.4.tgz mv harbor /usr/local/ cd /usr/local/harbor cp harbor.yml.tmpl harbor.yml ./install.sh ``` 默认用户名admin,密码:Harbor12345 # Harbor简单使用 - 配置http的协议访问仓库 ``` { "registry-mirrors": ["http://hub-mirror.c.163.com/","http://192.168.237.50/"], "insecure-registries":["http://192.168.237.50"] } ``` - 推送镜像 ``` # Harbor上创建一个项目ouge docker login 192.168.237.50 #需要先登录到Harbor docker tag ouge:nginx 192.168.237.50/ouge/ouge:nginx # 打标签 docker push 172.18.119.61/ouge/ouge:nginx # 推送 ``` - 拉取镜像 ``` docker pull 192.168.237.50/ouge/ouge:nginx # 拉取私有仓库需要登录 ```