自动化运维-----Docker容器

文章目录

  • 一、Docker简介
    • 1.什么是虚拟化
    • 2. 什么是Docker
    • 3.为什么选择Docker?(*敲黑板)
    • 4.容器与虚拟化的比较
    • 5.Docker组件
      • (1)Docker服务器与客户端
      • (2)Docker镜像与容器
      • (3) Registry(注册中心)
  • 二、Docker的安装与启动
    • 1.安装docker
    • 2.设置ustc的镜像
  • 三、常用命令
    • 1.项目案例:基于Docker构建2048项目
    • 报错
    • 2.基于Docker构建Ubuntu实现文件拷贝
      • (1)文件拷贝
      • (2)目录挂载
      • (3)查看容器IP地址
  • 四、应用部署
    • 1.mysql部署
      • 报错
      • 报错
  • 五、迁移和备份
    • 1.将容器保存为镜像
    • 2. 镜像备份
    • 3.镜像恢复与迁移
    • 4.命令总结
  • 六、 Dockerfile
    • 1.什么是Dockerfile
    • 2.常用命令
  • 七、Docker私有仓库
    • 1.私有仓库搭建和配置
    • 2.镜像上传至私有仓库

一、Docker简介

具体见ppt

我们之前做的许多项目如果要部署在别人电脑上,就要安装许多的库,环境部署,安装ngix等等,docker就可以处理这个问题,直接将做好的项目封装成一个容器,拿来用就可以了。

1.什么是虚拟化

在计算机中,虚拟化(英文: Virtualization)是一种资源管理技术,是将计算机的各种实体资源(如: 服务器、网络、内存及存储等)予以抽象、转化后呈现出来,

  • 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,从而最大化的利用物理硬件,对资源充分利用。
  • 虚拟化的种类有很多,例如:
    软件虚拟化:Vmware软件、KVM软件、VirtualBox软件等
    硬件虚拟化: 磁盘阵列RAID、逻辑卷LVM、
    内存虚拟化、网络虚拟化、桌面虚拟化、服务虚拟化、虚拟机等

2. 什么是Docker

Docker是一个开源的应用容器引擎, 诞生2013年,最初是dotCloud 公司内部的一个业余项目。它基于Google公司推出的Go语言实现。 项目后来加入Linux基金会,遵从了Apache2.0协议,源代码托管在 Github 进行维护。
在这里插入图片描述

3.为什么选择Docker?(*敲黑板)

- 上手快
用户只需要几分钟,就可以把自己的程序"Docker化"。
Docker依赖于"写时复制"(copy-onwrite)模型,使修改应用程序也非常迅速,可以说达到"随心所欲,代码即改"的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
- 职责的逻辑分类
使用Docker,开发人员只需要关心容器中优秀的应用程序,而运维人员只需要关心如何管理容器。**Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。**从而降低那种"开发时一切正常,肯定时运维的问题(测试环境都是正常的, 上线后出了问题就归结为肯定是运维的问题)"。
- 快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从盒子里一件一件的取)。
- 鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或者进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器。从而使分布式部署应用程序,扩展和调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,一个程序中可以运行多个应用程序)。

4.容器与虚拟化的比较

虚拟化方式,每个虚拟机都有一个自己的操作系统
自动化运维-----Docker容器_第1张图片
自动化运维-----Docker容器_第2张图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200501195016202.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU2ODYzMw==,size_16,color_FFFFFF,t_70

5.Docker组件

(1)Docker服务器与客户端

Docker是一个客户端/服务器(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。

  • Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。
  • 用户可以在同一台宿主机上运行Docker守护进程和客户端。
    自动化运维-----Docker容器_第3张图片

(2)Docker镜像与容器

仓库:每个仓库存放某一类镜像。
镜像:类似虚拟机镜像(eg:xxx.iso)。 eg: MySQL镜像、Redis镜像、2048镜像
容器:类似linux系统环境,运行和隔离应用。容器从镜像启动的时候,docker会在镜像的最上一层创建一个可写层,镜像本身是只读的,保持不变。

(3) Registry(注册中心)

Docker用Registry来保存用户构建的镜像。Registry分为公有和私有两种。

  • 公有仓库 :所有人可以访问下载镜像的仓库。Docker公司运营公共的Registry叫做Docker Hub。
  • 私有仓库: 规定范围内可以访使用的库。用户可以构建私有的Registry。

二、Docker的安装与启动

1.安装docker

1.打开git bash
连接阿里云服务器
设置服务器主机名

$ ssh [email protected]
[root@iz8vbijtqjs4nfugeph2m5z ~]# hostname docker #设置主机名为docker
[root@iz8vbijtqjs4nfugeph2m5z ~]# logout #退出重新进
$ ssh [email protected]

2.安装

yum install docker -y

3.docker一些操作指令

[root@docker ~]# docker -v
Docker version 1.13.1, build cccb291/1.13.1
[root@docker ~]# docker info
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl restart docker
[root@docker ~]# systemctl enable docker

2.设置ustc的镜像

编辑/etc/docker/daemon.json文件,添加清华镜像
修改了配置文件,重启docker

[root@docker ~]# vim /etc/docker/daemon.json #编辑此文件添加清华镜像
[root@docker ~]# systemctl restart docker  

在这里插入图片描述

三、常用命令

镜像相关命令

docker images 							 #查看镜像
docker search 2048(镜像名称) 			 #搜索镜像
docker pull docker.io/blackicebird/2048  #从镜像仓库拉取镜像
docker  rmi 镜像ID 						 #删除镜像
docker rmi `docker images -q`			 #删除所有镜像(注意:``是反向单引号)

容器相关命令

1.查看容器
docker ps							#查看所有正在运行的容器
docker ps -a						#查看所有容器(无论是否运行)
docker ps -l						#查看最后一次运行的容器
docker ps -f status=exited			#查看停止的容器

2.创建容器
(1)交互式创建容器(不建议)
# 交互式创建容器,退出后直接关闭容器,再次进入容器需要先docker start * 开启容器
docker run -it --name=myubuntu ubuntu /bin/bash  # 交互式创建容器, exit退出当前容器
退出:ctl +p+q退出时不会关闭容器
docker exec -it 容器名称/容器ID /bin/bash 		# 登录守护容器交互环境的方式

(2)守护式创建容器(建议)
docker run -d --name 2048 -p 0.0.0.0:81:80 docker.io/blackicebird/2048     #守护式创建容器
-d:后台运行;
--name:容器名字;
-p:将容器的80端口映射到本地的81端口,0.0.0.0:和81绑定的任何ip都可以访问;
容器的端口在哪里查找?在[Docker Hub](https://hub.docker.com/)官方文档里搜索2048,查找2048容器的端口。
docker.io/blackicebird/2048:拉去下来的镜像

3.关闭与启动容器
docker stop 容器名称(或者容器ID)			#关闭容器
docker start 容器名称(或者容器ID)			#启动容器

自动化运维-----Docker容器_第4张图片

1.项目案例:基于Docker构建2048项目

介绍:
我们呢只需要从镜像仓库中拉取2048的镜像到本地,运行创建容器,浏览器访问服务器IP,就可以玩游戏了。
也可以把我们自己写的项目封装成一个镜像,别人拉取下来创建容器就可以访问了。

操作如下:
1.查看docker镜像,发现没有镜像,
2.在仓库中进行搜索 ,出现很多相关镜像,选一个START高的,进行pull

[root@docker ~]# docker images  #查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@docker ~]# docker search 2048  #搜索2048相关镜像
INDEX       NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/blackicebird/2048         2048 with logging                               4
docker.io   docker.io/isula/2048                                                                1

3.从镜像仓库拉取镜像到本地
4.查看本地是否有此镜像
5.有,创建容器
https://hub.docker.com/

[root@docker ~]# docker pull docker.io/blackicebird/2048  #从镜像仓库拉取镜像
[root@docker ~]# docker images   #查看
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker run -d --name 2048 -p 0.0.0.0:80:80 docker.io/blackicebird/2048 #创建容器
117b2cb17eaada303a13393455f88c6ffeb9053d7f5a522520f8847f7cc9223c
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                NAMES
117b2cb17eaa        docker.io/blackicebird/2048   "nginx -c /etc/ngi..."   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   2048

6.浏览器访问服务器IPhttp://39.101.175.120/
就可以直接玩游戏了

自动化运维-----Docker容器_第5张图片

报错

错误1:
执行创建容器命令:docker run -d --name 2048 -p 0.0.0.0:80:80 docker.io/blackicebird/2048
Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused “process_linux.go:258: applying cgroup configuration for process caused “Cannot set property TasksAccounting, or unknown property.””.

原因:docker和操作系统版本不兼容的原因.
解决:1. 升级系统版本;2. 降低docker版本
具体操作:

  1. cat /etc/redhat-release查看当前系统版本7.4以下需要升级
  2. yum update升级系统软件(时间较长)
  3. cat /etc/redhat-release查看升级后的系统版本**

错误2:
Error response from daemon: Conflict. The container name “/2048” is already in use by container 4ce3ef62e2ce4d2f8b5c9d7a0032b61281059ee3476b8434e971cf3513b3fd65. You have to remove (or rename) that container to be able to reuse that name…
原因:上一次运行出错后,已经创建了2048容器
解决:关闭容器,删掉容器

[root@docker ~]# docker ps -a  	#查看容器名称
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
4ce3ef62e2ce        docker.io/blackicebird/2048   "nginx -c /etc/ngi..."   37 minutes ago      Created                                 2048

[root@docker ~]# docker stop 2048  	#关闭容器
2048

[root@docker ~]# docker rm 2048	 	#删除容器
2048
[root@docker ~]# docker ps -a	#再次查看
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

错误3.创建了容器成功后用浏览器无法访问
原因:1.防火墙没关;2.阿里云安全组80端口没有设置

2.基于Docker构建Ubuntu实现文件拷贝

(1)文件拷贝

docker cp 容器名称:容器目录 需要拷贝的文件或者目录   #把容器中的文件拷贝到本地
docker cp 需要拷贝的文件或者目录 容器名称:容器目录   #把本地的文件拷贝到容器

操作如下:
在镜像库中拉取一个ubuntu镜像,创建成一个容器,执行拷贝操作
实现:
把容器中的文件拷贝到本地
把本地的文件拷贝到容器
注意:拷贝欸操作在本地执行,不是容器

[root@docker ~]# docker search ubuntu 
[root@docker ~]# docker pull docker.io/ubuntu
[root@docker ~]# docker run -it --name my_ubuntu docker.io/ubuntu /bin/bash		#使用交互式创建容器
root@f807375c71f2:/#				#进入ubuntu命令行
root@f807375c71f2:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr
root@f807375c71f2:/# hostname > hostname.txt  #在容器里创建一个hostname.txt文件
root@f807375c71f2:/# cat hostname.txt   #查看文件
f807375c71f2
root@f807375c71f2:/# [root@docker ~]#    #ctl+p+q退出,在本地执行拷贝操作
[root@docker ~]# docker cp f807375c71f2:/hostname.txt /mnt/     #将容器里的txt文件拷贝到本地/mnt/ 
[root@docker ~]# cat /mnt/hostname.txt  #查看
f807375c71f2
[root@docker ~]# docker cp /etc/passwd f807375c71f2:/tmp/  #将本地/etc/passwd文件拷贝到容器里
[root@docker ~]# docker exec -it my_ubuntu /bin/bash  #进入交互式命令行
root@f807375c71f2:/# head -3 /tmp/passwd   #查看拷贝文件的前三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root@f807375c71f2:/#

(2)目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主主机某个目录的文件从而影响容器。

[root@docker ~]# docker run -di -v /usr/share/Pro:/usr/share/project1 --name ubuntu_dir_mapping docker.io/ubuntu

-di:进入后台交互式
-v:把容器的/usr/share/project1映射到本地主机 /usr/share/Pro
--name:映射名为ubuntu_dir_mapping
docker.io/ubuntu:对这个镜像进行映射

操作:
对docker.io/ubuntu镜像的/usr/share/project1目录映射到本地/usr/share/Project1目录,在容器里/usr/share/project1目录中创建文件,在本地/usr/share/Project1目录查看是否自动执行创建文件。
在真机上删除文件,进入容器里面查看是否删除。

[root@docker ~]# docker images  #查看镜像
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker run -di -v /usr/share/Project1:/usr/share/project1 --name ubuntu_dir_mapping docker.io/ubuntu  #对docker.io/ubuntu镜像做映射
7607bc5c73238e7869daae497675f14e4db4ff6960ba4435dbf2010a744e9268
[root@docker ~]#
[root@docker ~]# docker exec -it ubuntu_dir_mapping /bin/bash #交互式进行操作
root@7607bc5c7323:/# cd /usr/share/project1/
root@7607bc5c7323:/usr/share/project1# ls
root@7607bc5c7323:/usr/share/project1# touch file{1..10}   #在容器中这个目录创建文件
root@7607bc5c7323:/usr/share/project1# ls
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
root@7607bc5c7323:/usr/share/project1#
root@7607bc5c7323:/usr/share/project1# touch file{1..10}[root@docker ~]#        #ctl+p+q退出容器
[root@docker ~]#
[root@docker ~]# ls /usr/share/Project1/   #在本地查看刚才在容器中的操作是否自动在本地也执行
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
[root@docker ~]#


[root@docker ~]# rm -fr /usr/share/Project1/file{2..8}  #在本地删除文件
[root@docker ~]# ls  /usr/share/Project1/
file1  file10  file9
[root@docker ~]# docker exec -it ubuntu_dir_mapping /bin/bash  #进入容器中查看文件是否删除
root@7607bc5c7323:/# ls /usr/share/project1
file1  file10  file9
root@7607bc5c7323:/#

(3)查看容器IP地址

 docker inspect my_ubuntu(容器的名称)   #令查看容器运行的各种数据
 docker inspect --format='{
    {.NetworkSettings.IPAddress}}' my_ubuntu  #直接查my_ubuntu容器的IP

四、应用部署

1.mysql部署

1.拉取mysql镜像

[root@docker ~]# docker search mysql
[root@docker ~]# docker pull docker.io/mysql
[root@docker ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB

报错

问题:在镜像仓库中拉取mysql时,非常慢,
解决:在配置文件中加清华镜像源

[root@docker ~]# vim /etc/docker/daemon.json #编辑此文件添加清华镜像
[root@docker ~]# systemctl restart docker  

在这里插入图片描述

2.创建mysql容器

[root@docker ~]# docker run -id --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD='daliu' mysql  #运行时必须加-e编辑密码,否则不能运行
0ee929884b59da2195349a54db867b10fe394ec49acc0d69a1a359d9be335f53
[root@docker ~]# docker inspect --format='{
     {.NetworkSettings.IPAddress}}' mysql  #查询mysqlIP
172.17.0.2
[root@docker ~]#

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口。
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登录密码。此参数可以在Docker Hub官网查。

3.进入MySQL容器并登录MySQL

[root@docker ~]# docker ps  #查容器名
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
0ee929884b59        mysql               "docker-entrypoint..."   4 minutes ago       Up 4 minutes        33060/tcp, 0.0.0.0:3307->3306/tcp   mysql
[root@docker ~]# docker exec -it mysql /bin/bash  #运行容器进入交互环境
root@0ee929884b59:/# mysql -uroot -pdaliu   #在容器中中登陆mysql

mysql>  create user daliu@'%' identified by 'daliu'; #创建daliu用户
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'daliu'@'%';  #授权
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'daliu'@'%' IDENTIFIED WITH mysql_native_password BY 'daliu';  #修改账户密码加密规则并更新用户密码。因为容器和本地mysql的版本不一样,密码加密规则不一样。

root@0ee929884b59:/# mysql -udaliu -pdaliu  #以daliu用户进入mysql,可以登陆
mysql>
[2]+  Stopped                 mysql -udaliu -pdaliu
root@0ee929884b59:/# [root@docker ~]#  #退出容器
[root@docker ~]# mysql -udaliu -pdaliu -h172.17.0.2   #退出容器在本地在次登陆,可以登陆
MySQL [(none)]>
[1]+  Stopped                 mysql -udaliu -pdaliu -h172.17.0.2

报错

问题1:在本地输入mysql时,显示没有此命令,说明本地没有安装mysql
解决:安装mysql

[root@todolist-server ~]# yum install mariadb-server -y
[root@todolist-server ~]# systemctl start mariadb
[root@todolist-server ~]# systemctl enable mariadb
[root@todolist-server ~]# mysql_secure_installation #初始化修改密码

问题2:在本地以daliiu用户登陆,不能登陆

[root@docker ~]# mysql -udaliu -pdaliu -h172.17.0.2   
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

原因:
容器中的mysql和本地的版本不一样
mysql8 之前的版本中加密规则是 mysql_native_password
而在mysql8之后,加密规则是 caching_sha2_password
在这里插入图片描述
解决: 进入容器,登陆mysql,修改账户密码加密规则并更新用户密码

[root@docker ~]# docker exec -it mysql /bin/bash
root@0ee929884b59:/# mysql -uroot -pdaliu
mysql> ALTER USER 'daliu'@'%' IDENTIFIED WITH mysql_native_password BY 'daliu';  

root@0ee929884b59:/# [root@docker ~]#      
[root@docker ~]# mysql -udaliu -pdaliu -h172.17.0.2   #退出容器在本地在次登陆,可以登陆
MySQL [(none)]>
[1]+  Stopped                 mysql -udaliu -pdaliu -h172.17.0.2

五、迁移和备份

1.将容器保存为镜像

docker commit mysql(容器名) mysql:remove_login(镜像名)

练习:
我们刚才给mysql创建了一个用户,并授权,可以远程登陆。
下载我们可以把这个容器封装起来,做成镜像,别人就可以拉取到本地,然后可以直接远程连接,不用在部署了。

[root@docker ~]# docker commit mysql mysql:remove_login #将容器保存为本地镜像
sha256:0b265070d49553532427adad4dc96e3de47c5a8a92641f93f64c6ae9f0be0176
[root@docker ~]# docker images  #查看镜像
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mysql                         remove_login        0b265070d495        24 seconds ago      541 MB
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker run -d --name mysql_test -p 3308:3306 mysql:remove_login  #运行本地镜像创建容器
b9c1bd39dc67ee6233338e96e559d04324a3a23b7f12bc023691b5a4dbf8be3f
[root@docker ~]# docker inspect --format='{
     {.NetworkSettings.IPAddress}}' mysql #查看容器IP
172.17.0.2
[root@docker ~]# mysql -udaliu -pdaliu -h172.17.0.2  #这是我们刚才配置好的以daliu用户远程登陆,登陆成功
MySQL [(none)]>

2. 镜像备份

将镜像保存为tar文件

docker save -o remote_mysql.tar mysql:remove_login
[root@docker ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mysql                         remove_login        0b265070d495        About an hour ago   541 MB
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker save -o remote_mysql.tar mysql:remove_login

3.镜像恢复与迁移

docker load  -i remote_mysql.tar

操作:
为了看到效果,先删除原来的镜像mysql:remove_login,然后加载压缩包,并查看镜像目录

[root@docker ~]# docker ps -a #查看容器ID
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                     PORTS                               NAMES
b9c1bd39dc67        mysql:remove_login            "docker-entrypoint..."   About an hour ago   Up About an hour           33060/tcp, 0.0.0.0:3308->3306/tcp   mysql_test
0ee929884b59        mysql                         "docker-entrypoint..."   3 hours ago         Up 3 hours                 33060/tcp, 0.0.0.0:3307->3306/tcp   mysql
7607bc5c7323        docker.io/ubuntu              "/bin/bash"              4 hours ago         Exited (137) 3 hours ago                                       ubuntu_dir_mapping
f807375c71f2        docker.io/ubuntu              "/bin/bash"              5 hours ago         Exited (0) 3 hours ago                                         my_ubuntu
79633145c2f2        docker.io/blackicebird/2048   "nginx -c /etc/ngi..."   6 hours ago         Exited (0) 3 hours ago                                         2048
[root@docker ~]# docker stop b9c1bd39dc67 #关闭容器
b9c1bd39dc67
[root@docker ~]# docker rm b9c1bd39dc67  #删除容器
b9c1bd39dc67
[root@docker ~]# docker images  #查看镜像
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mysql                         remove_login        0b265070d495        About an hour ago   541 MB
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker rmi 0b265070d495  #删除镜像
Untagged: mysql:remove_login
Deleted: sha256:0b265070d49553532427adad4dc96e3de47c5a8a92641f93f64c6ae9f0be0176
Deleted: sha256:ae4661c67a7ad557a93e1a6ca077473e0595727d874816cd324564e1a3d9c87c
[root@docker ~]# docker images  #查看镜像,已删除
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]# docker load  -i remote_mysql.tar  #加载压缩包
cd03e2e62c56: Loading layer 6.656 kB/6.656 kB
Loaded image: mysql:remove_login
[root@docker ~]# docker images   #查看镜像,remove_login 被成功加载
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mysql                         remove_login        0b265070d495        About an hour ago   541 MB
docker.io/mysql               latest              a7a67c95e831        3 days ago          541 MB
docker.io/ubuntu              latest              1d622ef86b13        7 days ago          73.9 MB
docker.io/blackicebird/2048   latest              960672cda083        4 years ago         8.02 MB
[root@docker ~]#

4.命令总结

自动化运维-----Docker容器_第6张图片

六、 Dockerfile

1.什么是Dockerfile

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
对于开发人员:可以为开发团队提供一个完全一致的开发环境。
对于测试人员: 可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。
对于运维人员: 在部署时,可以实现应用的无缝移植。

2.常用命令

自动化运维-----Docker容器_第7张图片

[root@docker ~]# vim docker_file  #写一个docker_file文件
[root@docker ~]# mkdir dockertest  #创建一个总目录,dockerfile和所有的文件都在这个目录中
[root@docker ~]# mv docker_file  dockertest/dockerfile  #将docker_file的内容移动到dockerfile里,顺便建立dockerfile文件
[root@docker ~]# cd dockertest/  
[root@docker dockertest]# ls
dockerfile
[root@docker dockertest]# touch hello.txt  #建一个hello.txt文件,练习将当前文件拷贝到容器里
[root@docker dockertest]# vim hello.txt
[root@docker dockertest]#
[root@docker dockertest]# docker build --no-cache -t ubuntu:test .    #加载dockerfile文件

dockerfile文件

FROM docker.io/ubuntu  #来自哪个基本镜像
MAINTAINER daliu  #作者
RUN hostname > /mut/hostname.txt  #运行:将容器的主机名重定向到/mut/hostname.txt
RUN cp /etc/passwd /mnt/passwd  #运行:拷贝容器/etc/passwd到/mnt/passwd
COPY hello.txt /mnt/hello.txt  #拷贝:当前目录hello.txt到容器/mnt/hello.txt
ENV username daliu  
ENV password daliu
EXPOSE 80
CMD /bin/basg

七、Docker私有仓库

1.私有仓库搭建和配置

自动化运维-----Docker容器_第8张图片
自动化运维-----Docker容器_第9张图片

2.镜像上传至私有仓库

自动化运维-----Docker容器_第10张图片

你可能感兴趣的:(自动化运维-----Docker容器)