Linux安装docker
Linux安装docker
- 作者QQ:67065435 QQ群:821635552
- docker安装前的准备
# 查看内核版本 uname -r# 移除旧版本docker yum remove docker \ docker-ce \ docker-common \ docker-logrotate \ docker-client \ docker-client-latest \ docker-latest \ docker-latest-logrotate \ docker-engine \ docker-selinux \ docker-engine-selinux \ -y# 安装依赖 yum install -y lvm2 yum-utils device-mapper-persistent-data# 添加docker源,更新yum缓存 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast
- docker安装
yum install -y docker-ce
- docker换源并更换存储路径
mkdir /data mkdir /etc/dockervim /etc/docker/daemon.json{ "registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com", "https://y0qd3iq.mirror.aliyuncs.com", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com" ], "graph": "/data/docker" }ESC :wq
- 网易云无法启动docker问题
# Ubuntu & Debian sudo apt-get install bridge-utils -y sudo brctl show sudo brctl addbr docker0 sudo ifconfig docker0 172.17.0.1/16 sudo ifconfig docker0 up sudo systemctl start docker# CentOS yum install bridge-utils -y brctl show brctl addbr docker0 ifconfig docker0 172.17.0.1/16 ifconfig docker0 up systemctl start docker# 原文链接 https://www.163yun.com/help/documents/56874253316968448
- docker启动停止
# 启动docker systemctl start docker # 重启docker systemctl restart docker # 停止docker systemctl stop docker # 开机运行docker systemctl enable docker # 开机不运行docker systemctl disable docker
- docker停止
systemctl disable docker
- docker移除
yum remove docker-ce
- docker目录移除
rm -rf /data/docker
- docker-compose
- docker拷贝主机文件到容器
docker cp [主机目录/主机文件] [容器id/容器名称]:[容器目录/容器文件]
- docker查看容器改动
docker diff [容器id/容器名称]
- docker镜像创建
docker commit -a [镜像作者] -m [镜像说明] [容器id/容器名称] [创建的镜像的名字]:[创建的镜像的版本(TAG标签)]
- docker拉取镜像(可以忽略TAG标签,则docker取latest版本)
docker pull [镜像名称]:[TAG标签] # 参数说明 -a拉取指定镜像名称下所有TAG的镜像 --disable-content-trust 拉取镜像时忽略校验,默认开启
- docker提交镜像
docker push [镜像名称]:[TAG标签] # 参数说明 --disable-content-trust 提交镜像时忽略校验,默认开启
- docker搜索镜像
docker search [搜索关键词] # 参数说明 --automated只列出automated类型的镜像 --no-trunc显示完整的镜像描述 -s [数字]最大搜索结果数
- docker为镜像添加一个新名称+新标签
docker tag [原镜像名称]:[原TAG标签] [新镜像名称]:[新TAG标签]
- docker登录/退出DockerHub
# 登录 docker login -u [用户名] -p [密码] [仓库地址(不声明则取默认)] # 退出 docker logout [仓库地址(不声明则取默认)]
- docker镜像管理
# 镜像列表 docker images# 下载镜像(可以忽略TAG标签,则docker取latest版本) docker pull [镜像名称]:[TAG标签] # 参数说明 -a拉取指定镜像名称下所有TAG的镜像 --disable-content-trust 拉取镜像时进行校验# 下载镜像(示例) docker pull nginx docker pull php:7.3-fpm# 删除镜像(要先删除镜像下所有的容器) docker rmi [镜像id/镜像名称/镜像名称:TAG标签]# 删除镜像(示例) docker rmi nginx docker rmi php:7.3-fpm
- docker容器管理
# docker通过镜像运行一个容器(可以忽略TAG标签,则docker取latest版本) docker run \ -d -i -t \ -p [服务器端口]:[docker端口] \ -p [服务器端口]:[docker端口] \ -p [服务器端口]:[docker端口] \ -v [主机目录]:[容器目录] \ -v [主机目录]:[容器目录] \ -v [主机目录]:[容器目录] \ --name=[容器名称(随便起名)] \ --privileged=[true|false] \ [镜像名称]:[TAG标签] \ [脚本命令]# docker通过镜像创建一个容器(用法同run,只是创建后容器不会运行) docker create \ -d -i -t \ -p [服务器端口]:[docker端口] \ -p [服务器端口]:[docker端口] \ -p [服务器端口]:[docker端口] \ -v [主机目录]:[容器目录] \ -v [主机目录]:[容器目录] \ -v [主机目录]:[容器目录] \ --name=[容器名称(随便起名)] \ --privileged=[true|false] \ [镜像名称]:[TAG标签] \ [脚本命令]# docker在容器内运行命令 docker exec [容器id/容器名称] [命令行]# docker查看运行容器 docker ps# docker查看所有容器 docker ps -a# docker移除容器(要先停止容器) docker rm [容器id/容器名称]# docker杀死容器 docker kill [容器id/容器名称]# docker停止容器 docker stop [容器id/容器名称]# docker启动容器 docker start [容器id/容器名称]# docker重启容器 docker restart [容器id/容器名称]# docker暂停容器中进程 docker pause [容器id/容器名称]# docker恢复容器中进程 docker unpause [容器id/容器名称]# docker查看容器进程 docker top [容器id/容器名称]# docker连接到容器(运行中) docker attach [容器id/容器名称]# docker查看容器端口 docker port [容器id/容器名称]# docker查看容器日志 docker logs [容器id/容器名称]# docker查看容器进程 docker top [容器id/容器名称]# docker检查容器状态 docker inspect [容器id/容器名称]# docker实时事件查看 docker events \ -f 'image'=[镜像id/镜像名称] \ -f 'container'=[容器id/容器名称] \ --since=[十位秒数时间戳/日期YYYY-MM-DD] \ --until=[十位秒数时间戳/日期YYYY-MM-DD] # 参数说明 -f事件通过条件过滤 --since 事件通过开始时间过滤 --until 事件通过结束时间过滤
- docker创建并运行容器示例
# 示例:通过镜像运行容器 docker run \ -d -i -t \ -p 80:80 \ -p 443:443 \ -v /www/:/www/ \ -v /etc/letsencrypt/:/etc/letsencrypt/ \ -v /usr/local/nginx/logs/:/etc/nginx/logs/ \ -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ --name=nginx-web \ --privileged=true \ nginx# 参数说明 # 进行端口映射时,请先保证端口未被占用 # 进行路径映射时,请保证路径的正确性 -v [主机路径]:[容器路径] -p [主机端口]:[容器端口]
- docker创建DockerFile
mkdir /root/image cd /root/image vim DockerFileFROM centos:7 ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*; \ rm -f /etc/systemd/system/*.wants/*; \ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*; \ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]ESC :wq
- docker下载镜像并命名为image:1.0
cd /root/image docker build --rm -t image:1.0 .
- docker通过image:1.0镜像生成一个名为image的容器
docker run \ -d -i -t \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --name=image \ --privileged=true \ image:1.0
- docker连接到名为image的容器
docker exec -i -t image /bin/bash
- docker在名为image的容器中安装nginx、mysql、php
wget http://xxx.xxx.xxx/xxx.tar.gz tar -zxvf xxx.tar.gz cd xxx ./configure make make install ... # 通过systemd来管理服务的运行和开机启动 systemctl xxxxxxx ... exit
- docker登录
docker login -u [账号] -p [密码]
- docker将容器打包到一个新镜像
docker commit -a 'ZhihuanGeng' -m 'CentOS LNMP IMAGE.Systemd enable.' image 2233466866/image:1.0
- docker提交打包镜像到docker hub
docker push 2233466866/image:1.0
- docker通过本地2233466866/image:1.0镜像运行一个test容器
docker run \ -d -i -t \ -p 80:80 \ -p 443:443 \ -p 3306:3306 \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --name=test \ --privileged=true \ 2233466866/image:1.0
- docker连接到test容器查看服务运行情况
docker exec -i -t test /bin/bash ps aux|grep php ps aux|grep mysql ps aux|grep nginx
- 2233466866/lnmp
- 2233466866/lnnp
- 2233466866/centos
- 2233466866/centos8
- Dockerfile语法
# FROM语法 FROM scratch FROM [镜像名称] FROM [镜像名称]:[TAG标签] FROM [镜像名称]@[镜像id] # FROM作用 FROM 用来指定你要构建的镜像基于哪个镜像,如果不基于任何镜像则使用scratch# MAINTAINER语法 MAINTAINER [维护者名称] # MAINTAINER作用 MAINTAINER 用来声明维护者名称# RUN语法 RUN [命令1] [参数1] [参数2] RUN ["[命令2]", "[参数1]", "[参数2]"] RUN ["[命令3]", "[参数1]", "[参数2]", "[参数3]"] # RUN作用 RUN 用来在构建镜像时,按序执行一组命令# ADD语法 ADD [主机目录/文件1] [镜像目录/文件1] ADD ["[主机目录/文件2]","[镜像目录/文件2]"] # ADD作用 ADD 用来将主机目录、主机文件或网络资源添加到要生成的镜像中,如果是tar文件则会将解压后的文件添加到要生成的镜像中,网络压缩资源不会解压# COPY语法 COPY [主机目录/文件1] [镜像目录/文件1] COPY ["[主机目录/文件2]","[镜像目录/文件2]"] # COPY作用 COPY 用来将主机目录、主机文件或网络资源添加到要生成的镜像中# CMD语法 CMD [命令1] [参数1] [参数2] CMD ["[命令2]", "[参数1]", "[参数2]"] CMD ["[命令3]", "[参数1]", "[参数2]", "[参数3]"] # CMD作用 CMD 用来在启动容器时,按序执行一组命令# ENTRYPOINT语法 ENTRYPOINT [命令1] [参数1] [参数2] ENTRYPOINT ["[命令2]", "[参数1]", "[参数2]"] # ENTRYPOINT作用 ENTRYPOINT 用来配置容器使其可执行化# LABEL语法 LABEL [元数据1=值1] [元数据2=值2] # LABEL作用 LABEL 用来为镜像添加元数据# ENV语法 ENV [环境变量1=值1] [环境变量2=值2] # ENV作用 ENV 用来设置环境变量# EXPOSE语法 EXPOSE [端口1] [端口2] # EXPOSE作用 EXPOSE 用来指定于外界交互的端口# VOLUME语法 VOLUME ["[主机目录1]","[主机目录2]"] # VOLUME作用 VOLUME 用来持久化目录映射到容器让所有容器共享,修改卷不会修改容器本身# WORKDIR语法 WORKDIR [镜像目录] # WORKDIR作用 WORKDIR 用来指定当前工作目录# USER语法 USER root # USER作用 USER 用来指定运行容器时的用户名# ARG语法 ARG [变量名1=值1] [变量名2=值2] # ARG作用 ARG 用于指定传递给构建运行时的变量# ONBUILD语法 ONBUILD [触发器动作] ONBUILD CMD ["curl","http://xxx.xxx.xxx/send_email?content=xxx"] # ONBUILD作用 ONBUILD 用于设置镜像FROM触发器,即:当你的镜像被作为基础镜像时会触发指定动作
- Link的理解
# 1. 下载redis镜像 docker pull redis:latest# 2. 通过redis镜像运行一个redis容器 docker run -dit --name=redis redis:latest# 3. 下载lnmp镜像 docker pull 2233466866/lnmp:latest# 4. 通过lnmp镜像运行一个lnmp容器并link到redis docker run -dit \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --privileged=true \ --link=redis \ --name=lnmp \ 2233466866/lnmp# 5. 进入lnmp容器 docker exec -it lnmp bash# 6. 创建一个php文件 vim test.phpconnect('redis', 6379); $redis->set('a', '123'); echo $redis->get('a'); ESC :wq# 7. 运行php文件 php test.php# 8. 可以看到运行结果输出了123
- 官方教程
- 【Linux安装docker】快速入门
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- Mac安装Chromedriver
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- MAC安装Mongo
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- react|react 安装
- VueX--VUE核心插件
- python-安装sublime遇到异常