1、docker的介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
1.1、docker和虚拟机的区别
虚拟机的性能比较依靠于硬件,而docker开源且轻量化,构建在操作系统中,更加轻便docker的轻量化适用于部署少量的应用,例如说一个docker容器部署一个redis,一个docker和虚拟机的区别mysqldocker基于dockerfile来进行构建容器,程序开发人员可以手动编写dockerfile来指定相应的系统环境和依赖
1.2、docke的优点
- 文件系统隔离,每个不同的容器都存在不同的独立文件系统中docker的几大特点
- 资源隔离,每个容器都有自己独立的ip,网络和虚拟接口
- 日志记录,Docker将会收集和记录每个进程容器的标准(stdout/stder/stdin)用于实时检索或批量检索。
1.3、docker的镜像和容器介绍
容器的本质就是进程,不同的容器有着自己独立的root文件系统,网络配置,一个隔离的空间。容器一旦消失,则里面包含的数据也会发生丢失。容器里面所有的存储信息都应该使用数据卷或者其他形式。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
2、docker安装
卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置稳定仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
选择安装版本
yum install docker-ce-<VERSION_STRING>
yum install docker-ce-18.03.1.ce-1.el7.centos
docker换源
方便快速下载镜像,否则下载镜像会很慢
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://pee6w651.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
}
EOF
3、docker使用
以安装mysql5.6为例子
启动并加入开机启动:
systemctl start docker
systemctl enable docker
查看docker版本
docker version
验证是否安装成功
docker run hello-world
获取镜像相关命令
可以去官网https://hub.docker.com/找镜像
docker pull 镜像名称
docker pull mysql:5.6
docker images |grep mysql
运行镜像
[root@localhost ~]# docker images //查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 e143ed325782 11 days ago 302MB
mysql latest d435eee2caa5 11 days ago 456MB
mysql <none> b3983abaa3fe 6 weeks ago 302MB
daocloud.io/centos latest 0f3e07c0138f 2 months ago 220MB
hello-world latest fce289e99eb9 11 months ago 1.84kB
[root@localhost ~]# docker run -t -i mysql:5.6 /bin/bash //运行mysql5.6的镜像
root@e1dbca28060e:/# service mysql start //进入容器,进入后是斜杠
退出容器
root@e1dbca28060e:/# exit
exit
[root@localhost ~]#
后台运行容器(推荐这个方法)
加一个参数-d,后启动容器
[root@localhost ~]# docker run -itd mysql:5.6 /bin/bash
然后再进入容器
[root@localhost ~]# docker exec -it 952ef87605ce /bin/bash
删除镜像
[root@localhost ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 e143ed325782 11 days ago 302MB
mysql 5.7 1e4405fe1ea9 11 days ago 437MB
mysql latest d435eee2caa5 11 days ago 456MB
ubuntu latest 775349758637 4 weeks ago 64.2MB
hub.c.163.com/library/mysql latest 9e64176cd8a2 2 years ago 407MB
[root@localhost ~]# docker rmi e143ed325782
Untagged: mysql:5.6
Untagged: mysql@sha256:5345afaaf1712e60bbc4d9ef32cc62acf41e4160584142f8d73115f16ad94af4
Deleted: sha256:e143ed325782400813587554c5c43863484d20830c208f6be46b530fb9c1206e
Deleted: sha256:c57eaa2525cbec04255bf2791a0591a6d28d725f93370a64895c584975149b43
Deleted: sha256:c3436f861d2b562b7b787f3a0f491befa5f29352c5365408e3dc28a3a647288e
Deleted: sha256:0e325b2ff3ff022c87a1d4460cbbdea6ee4e2f4ee549c52847b13bc7be711e5c
Deleted: sha256:20ec0673abe3bb4d09a94e3b4408d56ebd52f0b9e932a1a0dec03c00edfef99d
Deleted: sha256:a5f2c182a63cf075dca0d1fee5a933d599174449592c3d462f98600df1393012
Deleted: sha256:65fc11c19a9eacf2c84ace4ea0aaf551375a29ad9d9a5c07d4d5280fe4be974a
查看运行的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03494894d14a mysql:5.6 "docker-entrypoint.s…" 22 seconds ago Up 21 seconds 0.0.0.0:3306->3306/tcp mymysql
删除某个容器
docker rm -f 71c843c94afb
docker rm xxx 删除已经停止的容器xxx
docker rm -f xxx 可以删除正在运行的容器xxx
docker rm -f ${docker pa -a -q} 删除所有的容器
运行docker镜像
docker run \
-p 3306:3306 \
--name mymysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.6
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
–name mymysql容器名称
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
容器导出
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
952ef87605ce mysql:5.6 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 3306/tcp
[root@localhost ~]# ls
a.csv anaconda-ks.cfg conf data logs redis-5.0.4.tar.gz
[root@localhost ~]# docker export mysql:5.6 > mysql.tar
[root@localhost ~]# ls
a.csv anaconda-ks.cfg conf data logs mysql.tar
容器导入
[root@localhost ~]# docker import mysql.tar
sha256:502eb9732ec8a03244415026826fb72d8a0a4b8b5f5a1288519ca20dfaca5a4d
[root@localhost ~]# ls
anaconda-ks.cfg conf data logs mysql.tar
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test v1 502eb9732ec8 9 seconds ago 297MB
mysql 5.6 e143ed325782 11 days ago 302MB
#将镜像存储
docker save nginx:latest > /root/docker-images/nginx.tar
#导入镜像文件
docker load --input /root/docker-images/nginx.tar
#通过符号的方式来导入
docker load < /root/docker-images/nginx.tar
后台运行容器
[root@localhost ~]# docker run -itd test:v1 /bin/bash
b28761e8f253f415dd8ede918013610340d8f2e4b192d083b812665d46e5dfc9
查看容器运行的ID
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b28761e8f253 test:v1 "/bin/bash" 58 seconds ago Up 57 seconds elastic_torvalds
[root@localhost ~]# docker exec -it b28761e8f253 /bin/bash
启动服务
root@b28761e8f253:/# service mysql start
文件拷贝
[root@localhost html]# docker cp /opt/html/user_login.html 0d4173ecf31f894e234ae9eb3d9eddd1b9d10b7af5c46608679fe11918af9644:/root/user_login.html