小白踩坑记-docker的安装与使用

Docker 容器~服务

0 docker概念

镜像image #想象成软件安装包,系统安装文件,

仓库repository #放置docker镜像的远程仓库

容器container #通过镜像运行起来的一个应用程序和应用程序运行所需环境

1 安装篇

1.1 Centos7 安装docker

# 安装docker命令
yum install docker

# 安装后检测服务是否启动成功
systemctl status docker

# 如果服务没有启动成功,启动服务
systemctl start docker

# 使能开机自启动
systemctl enable docker

# 停止开机自启动
systemctl disable docker

1.2 Ubantu20:04安装docker

# 由于apt官方库里的docker版本可能比较旧,所以先卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io

# 更新apt包索引:
# 更新过程中如果需要在Google上面下载资源,可能会报错
sudo apt-get updata

# 安装以下包以使apt可以通过HTTPS使用存储库(repository
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 使用下面的命令来设置stable存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 再更新一下apt包索引
sudo apt-get update

# 安装最新版本的Docker CE
sudo apt-get install -y docker-ce

2 常用命令

2.1 docker信息

docker version # 版本号

docker info  #详细信息

2.2 image操作命令

# 检索image
docker search image_name[:version] # 如果没有写version信息默认是latest 

# 下载image
docker pull image_name

# 列出镜像列表
docker images 

# 删除镜像
docker rmi image-name

# 删除镜像前要删除容器
docker rm container-name

2.3 container操作命令

# 启动容器(run)
docker run image-name
--name       # 自定义容器名称
-p 端口映射 #端口映射 -p 3307:3306 外部端口3307对应容器内3306端口 
-d 后台启动 #守护进程
-e 环境变量 #设置容器运行必要的环境变量

# 进入容器内
docker exec -it container_id or name bash

# 列出当前所有正在运行的container 
docker ps
 
# 列出所有的container 
docker ps -a 
 
# 列出最近一次启动的container 
docker ps -l

#保存到容器的修改(commit)
# 当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message 
docker commit ID new_image_name

# 删除所有容器 
docker rm `docker ps -a -q`
   
# 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container 
docker rm Name/ID 
   
# 停止、启动、杀死一个容器 
docker stop Name/ID 
docker start Name/ID 
docker kill Name/ID 
   
# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps 
docker logs Name/ID 
   
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的 
docker diff Name/ID 
   
# 显示一个运行的容器里面的进程信息 
docker top Name/ID 
   
# 从容器里面拷贝文件/目录到本地一个路径 
docker cp Name:/container_path to_path 
docker cp ID:/container_path to_path 
   
# 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10 
docker restart Name/ID 
   
# 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process 
docker attach ID

2.4 保存和加载镜像

当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。

# 保存镜像到一个tar包; -o, --output="" Write to an file 
docker save image_name -o file_path 

# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file 
docker load -i file_path 
   
# 机器a 
docker save image_name > /home/save.tar

# 使用scp将save.tar拷到机器b上,然后:
docker load < /home/save.tar

2.5 发布image(push)

# 发布docker镜像 
docker push new_image_name
  • 根据dockerfile构建一个容器
#build 
   --no-cache=false Do not use cache when building the image 
   -q, --quiet=false Suppress the verbose output generated by the containers 
   --rm=true Remove intermediate containers after a successful build 
   -t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success 

docker build -t image_name Dockerfile_path

3 docker应用

3.1 docker部署mysql 并且开启远程连接

  • 拉取docker镜像
docker pull mysql:latest # 镜像名:版本号

如果不指定版本号默认为最新
  • 查看下载好的镜像
docker images
  • 启动mysql实例
docker run --name dockermysql  -p 3307:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

# --name 定义容器的名称
# -p 端口映射 物理机端口:容器端口
# -e 环境变量,设置mysql登录密码
# -d 后台运行
# mysql:镜像名称
  • 进入容器内部
docker exec -it dockermysql bash
# 进入容器内部,dockermysql是启动实例时候定义的别名,也可以使用ID
  • 开启远程链接
use mysql

grant all privileges on *.* to 'root'@'%'

flush privileges

  • mysql数据持久化
# 先进入镜像看数据存储在哪
show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+

# 做一个测试,创建一个数据库,观察容器内的/var/lib/mysql/ 文件夹是否有变化
mysql> create database test charset=utf8;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)
# 添加前没有test
root@4ae274cade2f:/var/lib/mysql# ls 
auto.cnf    ca.pem	     client-key.pem  ib_logfile0  ibdata1  mysql	       private_key.pem	server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem	server-key.pem 
# 添加后有test
root@4ae274cade2f:/var/lib/mysql# ls
auto.cnf    ca.pem	     client-key.pem  ib_logfile0  ibdata1  mysql	       private_key.pem	server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   performance_schema  public_key.pem	server-key.pem	 test

结论:文件夹正确

# 将这个目录挂载到外部
docker run --name dockermysql -v /root/mysql/:/var/lib/mysql/  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --net mynet  -d mysql:5.7

3.2 docker部署postgre sql

  • 拉取镜像
docker pull postgres:9.4
  • 开启容器
docker run --name pgsql -p 54321:5432  -e POSTGRES_PASSWORD='root' -d postgres:9.4

4 疑惑点

4.1 疑问1 start 与 run 的区别

docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。

因为容器的ID是随机码,而容器的名字又是看似无意义的命名,我们可以使用命令

    docker rename  old_name new_name

给这个容器命名。这样以后,我们再次启动或停止容器时,就可以直接使用这个名字。

    docker [stop] [start]  new_name

而要显示出所有容器,包括没有启动的,可以使用命令

    docker ps -a


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kobe_OKOK_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值