docker基础


第一步: 环境 VMware 15 + centos 7.x + xshell 5 + winscp(传文件用)

https://www.cnblogs.com/jiangzongyou/p/12036985.html

 

第二步: 安装docker

视频地址: https://www.bilibili.com/video/av75620482?p=20

1. yum包更新到最新

sudo yum update

2. 安装需要的软件包,yum-util提供yum-config-manager功能, 另外两个是devicemapper驱动依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3. 设置yum源为阿里云(为了防止因网络问题导致的docker安装失败)

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4. 安装docker-ce, (ce是社区版免费的, ee是企业版收费的)

sudo yum install docker-ce

5. 查看当前docker版本

docker -v

6. 设置docker的镜像为ustc, (ustc docker mirror是老牌子的linux镜像提供者了, 不需要注册, 公共服务)

(默认是没有该文件的,请先建一个)

ustc官方介绍:  http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker

其实ustc并不好用, 阿里云好用, 参考阿里云加速  https://blog.csdn.net/julien71/article/details/79760919

mkdir -p /etc/docker
cd /etc/docker
touch daemon.json
vi /etc/docker/daemon.json

在该文件中输入以下内容 :

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}


# 每次修改这个文件后都要记得重启docker
systemctl daemon-reload
systemctl restart docker

7. 启动与停止docker

systemctl start docker   # 启动
systemctl status docker # 查看当前docker状态 "Active: active (running) 代表运行中" "Active: inactive (dead) 代表关闭"
systemctl stop docker # 停止
systemctl restart docker # 重启
systemctl enable docker # 设置成开机自动启动
docker info # 查看详细信息
docker --help # 查看具体有哪些命令,以及怎么用

第三步: 镜像命令

1. 查看镜像

docker images

 镜像名称是可以相同的, tag经常被当做版本号来使用

Active: active (running) 代表运行中

2. 网上搜索镜像

docker search centos

 

3. 从中央仓库拉取镜像(如果卡主了,就ctrl+c停止, 再重新拉取)

docker pull tutum/centos  # 默认是直接拉取该仓库的最新版本, 可以用 docker pull tutum/centos:14.04 来指定版本
docker pull centos # 这个官方的当前是必备

4. 删除镜像

docker rmi 镜像ID   #需要当前镜像下的所有容器都停止或全被删除,才能删除镜像

 

第五步: 容器命令

1. 查看容器(一个镜像可以创建多个容器)

docker ps     #  查看正在运行的容器
docker ps -a # 查看所有容器,包括开机的和关机的
docker ps -l # 查看最后一次运行的容器

 2. 创建容器

(1) 交互式方式创建容器

docker run -it --name=容器名称 镜像名称:标签 /bin/bash  #  容器名称必须唯一,如果标签是lastest就可以省略不写,/ban/bash的作用是因为容器的运行至少需要一个进程, 这里就指定用命令行作为启动命令
docker run -it --name=mycentos centos /bin/bash # 这里我们用官方的centos来创建没有centos容器,回车后会自动进行该容器,用ls命令查看便知, 再使用docker ps就能看到现在正在运行的该容器
exit # 退出当前容器环境,docker ps里面会显示Exited

(2) 守护式方式创建容器

docker run -id --name=容器名称 镜像名称:标签  # 守护式不需要/bin/bash
docker run -id --name=mycentos2 centos # 容器名称必须唯一,创建后不会自动进入,但其实后台在运行,返回一长串字符串代表创建成功
docker exec -it mycentos2 /bin/bash # 需要手动进入该容器
exit # 退出当前容器环境, 但不会真正退出,后台还是在运行, docker ps里面会显示Up

(3) 停止与启动

docker stop mycentos2  # 这才真正停止了这个容器, 也可以用 docker stop cd6c52a90b1b 这种方式
docker start mycentos2 # 启动容器(必须要启动容器后,才能够进入容器)

(4) 往容器中拷贝文件

docker cp /root/anaconda-ks.cfg mycentos2:/usr/local  # 往容器里拷贝文件, 需要退出容器在宿主机上才能执行这个命令
docker cp mycentos2:/usr/local/anaconda-ks.cfg /root/anaconda-ks22.cfg # 从容器里面往外拷贝文件,需要退出容器在宿主机上才能执行这个命令

(5) 目录挂载: 方便往容器中拷贝文件( -v 宿主机目录:容器目录, 如果目录不存在会自动创建)

docker run -id --name=mycentos3 -v /usr/local/mycentos3Files:/usr/local/myfiles centos # 只要修改了宿主机/usr/local/mycentos3Files里面的内容,那么容器mycentos3的/usr/local/myfiles会相应的改变

如果共享的是多级的目录, 可能会出现权限不足的提示

因为Centos7的安全模块selinux把权限禁掉了, 我们需要添加参数 --privileged=true 来解决挂载目录没有权限的问题

(6) 查看容器ip

docker inspect mycentos3 # 查看容器mycentos3的所有信息
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3 # 只看ip的内容

(7) 删除容器

docker rm mycentos # 需要改容器处于停止状态

 

第六步: 常用应用部署

1. mysql部署

(1) 拉取mysql镜像

docker pull centos/mysql-57-centos7

(2) 创建容器( 端口映射: -p 宿主机端口:容器端口, MYSQL_ROOT_PASSWORD设置密码)

docker run -id --name=test_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

 (3) 接下来使用navicat连接这个mysql

 

 

2. tomcat部署

(1) 拉取镜像

docker pull tomcat:7-jre7

(2) 创建容器

docker run -id --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

(3) 下载别人已经部署好的cas.war, 下载地址:  https://github.com/hjzgg/cas-overlay-template-.2.7/blob/master/target/cas.war

用xshell传到/root目录下后转移他, 然后在浏览器中输入  ip:9000/cas去访问

mv cas.war /usr/local/webapps

 

3. Nginx部署

(1) 拉取镜像

docker pull nginx

(2) 创建容器

docker run -id --name=mynginx -p 80:80 nginx

(3) 进入容器并查看nginx的html放在哪儿的

docker exec -it mynginx /bin/bash  # 进入容器
cat /etc/nginx/nginx.conf # 查看nginx配置, 可以发现 ''include /etc/nginx/conf.d/*.conf''
cat /etc/nginx/conf.d/default.conf # 进入这个配置文件,可发现 "root /usr/share/nginx/html;" 说明nginx的主页就放在这儿的
cd /usr/share/nginx/html # 进入这个文件夹就可以发现, 50x.html  index.html 这两个文件,说明找对了

(4) 接下来自己就可以把自己想用的静态文件夹改名为html,去覆盖nginx的html文件夹就ok了

 

4. Nginx部署

(1) 拉取镜像

docker pull redis

(2) 创建容器

docker run -id --name=myredis -p 6379:6379 redis

(3) 用windows的redis连接虚拟机上的redis容器, 以下示例说明连接成功

 

 

第七步: 备份与迁移

1. 容器备份

docker commit mynginx mynginx_i   # 把容器备份成镜像
docker images             # 可以看到多了一个mynginx_i镜像
docker run -id --name=mynginx2 -p 81:80 mynginx_i # 再用这个镜像来创建容器
接下里在windows浏览器里输入"宿主机ip:81" # 访问成功, 说明这个容器备份成功

2 镜像导入导出

docker save -o mynginx.tar mynginx_i   # 把镜像导出成文件(不指定路径的话,就在当前文件夹生成)
docker stop mynginx2            # 把刚刚开启的容器停止掉
docker rm mynginx2            # 删除这个容器
docker rmi mynginx_i          # 删除这个镜像
docker images               # 可见,mynginx_i这个镜像不在了
docker load -i mynginx.tar       # 导入镜像
docker images               # 可见,mynginx_i这个镜像恢复了(说明是可以带名字恢复的)

 

第八步: Dockerfile

什么是Dockerfile? 转载 https://www.cnblogs.com/edisonchou/p/dockerfile_inside_introduction.html

1. 基于 centos 7 创建 jdk8 镜像

jdk8 官网下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

mkdir -p /usr/local/dockerjdk8  # 创建一个文件夹, 并把下载的jdk8-linux移动到里面
cd /usr/local/dockerjdk8 # 进入到该目录
vi Dockerfile # 创建Dockerfile文件,固定写法,注意大小写

  FROM centos:7  # 指定基础镜像,如果没有centos:7, 那么它就会自动下载centos7
  MAINTAINER me  # 声明镜像创建者
  RUN mkdir /usr/local/java  # 创建一个目录
  ADD jdk-8u121-linux-x64.tar.gz /usr/local/java  # 自动把该文件解压到指定目录下

  ENV JAVA_HOME=/usr/local/java/jdk1.8.0_121  # 创建环境变量,让我们在任何地方都能使用jdk命令,jdk1.8.0_121是解压后的文件夹的名字,不要输错
  ENV JRE_HOME $JAVA_HOME/jre
  ENV CLASSPATH $JAVA_HOME/bin/dt/jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
  ENV PATH $JAVA_HOME/bin:$PATH

  --- wq 保存退出 ---

docker build -t='jdk1.8' .   # 创建 jdk1.8 镜像,指定Dockfile的文件路径时当前文件夹, 有个点 .  别忘记

docker images   # 可以看到多了一个 jdk1.8 镜像, 说明创建成功

如下

 

 

第九步: Docker私有仓库

扫盲转载: https://www.cnblogs.com/jaazz/p/9334183.html

1. 下载registry

docker pull registry   # 下载
docker run -id --name=registry -p 5000:5000 registry  # 创建容器,映射端口为5000
接下来去测试一下是否搭建成功

接下来去配置daimon.json文件, 让docker信任私有地址, 我们才能上传镜像到私有仓库

vi /etc/docker/daemon.json  
  {
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.101.189:5000"] # 把自己的宿主机的ip和5000端口加进去
  }
  --- wq 保存退出 ---

systemctl restart docker # 需要重启docker, 重启成功则说明配置成功,否则去检查insecure是否输错

接下来去上传镜像

tag标签详细用法, 转载: https://www.cnblogs.com/pzk7788/p/10180919.html

docker start registry  # 首先需要开启私服
docker tag jdk1.8 192.168.101.189:5000/jdk1.8 # 标记此镜像为私有仓库的镜像
docker images     # 可以看到多了一个 192.168.101.189:5000/jdk1.8 镜像, 但id其实是一样的
docker push 192.168.101.189:5000/jdk1.8 # 上传到私有仓库

 最后再从私有仓库下载镜像,

docker pull 192.168.101.189:5000/jdk1.8  # 回车, 发现提示如下

 

 意思是说, 已经存在该镜像了, 所以我们可以先删掉它,再下载试试,来验证命令是否可用

docker rmi 192.168.101.189:5000/jdk1.8  # 先删掉它
docker images # 确认不存在这个镜像
docker pull 192.168.101.189:5000/jdk1.8 # 可以发现,下载成功了,说明下载指令没有问题

 

 

------------- 完美的分割线 -----------


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM