一.Docker镜象操作
1.1.安装
yum update -y
yum remove docker docker-common docker-selinux docker-engine docer-io
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker
systemctl enable docker
docker version
1.2.镜象基本操作
查找镜象
docker search centos
拉取镜象
docker pull centos
查看镜象信息
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 8 weeks ago 237MB
查看镜象清详细信息
docker image inspect 470671670cac
只查看镜象ID
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image ls -q
470671670cac
镜象导出
docker image save
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image save centos:latest >/tmp/centos.0317.tar.gz
[root@ecs-x-large-4-linux-20200317144346 ~]# ll /tmp/centos.0317.tar.gz -lh
-rw-r--r-- 1 root root 234M Mar 17 17:56 /tmp/centos.0317.tar.gz
删除镜象
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 8 weeks ago 237MB
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image rm 470671670cac
Untagged: centos:latest
Untagged: centos@sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Deleted: sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee
Deleted: sha256:0683de2821778aa9546bf3d3e6944df779daba1582631b7ea3517bb36f9e4007
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
导入进去
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image load -i /tmp/centos.0317.tar.gz
0683de282177: Loading layer [==================================================>] 244.9MB/244.9MB
Loaded image: centos:latest
[root@ecs-x-large-4-linux-20200317144346 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 8 weeks ago 237MB
批量删除所有镜象
docker image rm -f `docker image ls -q`
二.docker容器管理
镜象启动起来.就变成容器
2.1.交互式启动第一个容器
docker container run -it centos:latest
2.2.查看运行的容器
[root@ecs-x-large-4-linux-20200317144346 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4177caab110c phpdockerio/php71-fpm "/bin/sh -c /usr/bin…" About a minute ago Up About a minute 9000/tcp php7.1
a91ee41c8e11 centos:latest "/bin/bash" 48 minutes ago Up 48 minutes pensive_rubin
2.3.启动容器时,设置名字
docker container run -it --name="php7.1" phpdockerio/php71-fpm
2.4.查看所有运行和没运行的容器
[root@ecs-x-large-4-linux-20200317144346 ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4177caab110c phpdockerio/php71-fpm "/bin/sh -c /usr/bin…" 6 minutes ago Up 6 minutes 9000/tcp php7.1
a91ee41c8e11 centos:latest "/bin/bash" 53 minutes ago Exited (127) 2 seconds ago pensive_rubin
三.守护式容器
服务类的程序,需要一直在后台运行.
3.1.守护式容器
[root@ecs-x-large-4-linux-20200317144346 ~]# docker run -d --name "nginx" nginx:1.17
Unable to find image 'nginx:1.17' locally
1.17: Pulling from library/nginx
68ced04f60ab: Pull complete
28252775b295: Pull complete
a616aa3b0bf2: Pull complete
Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Status: Downloaded newer image for nginx:1.17
369c355fdebcc716f7f236b303b8d82829b22ffdf30bb9d916ac724534ab1f6d
3.2.查询容器的详细命令
docker container inspect nginx
3.3.交互式容器,退出后,删除掉容器
docker container inspect nginx
3.4.守护式容器映射端口
docker container run -d --name="nginx_80to80" -p 80:80 nginx:1.17
3.5.已经停止容器重新启动,交互式
docker container start -i a91ee41c8e11
交互式,直接CTRL+D,就退出来了
3.6.停止守护运行容器
docker container stop 369c355fdeb
3.7.交互式容器重新连接
attach,连接已经在后台的容器
docker container attach pensive_rubin
在已有容器中,以子进程方式登陆,可以进容器的调式,退出时也不会影响当前容器.比如说,给Nginx修改配置文件,改完后退出来
3.8.把一个容器放后台永生运行4种方式
第一种:一直占用bash窗口
第二种:使用快捷键Ctrl+p+q
第三种:启容器时,一直运行死循环.sleep 10000
第四种:让服务一直在前台运行(常用),在制作守护式容器时,常用的方法
重新连接在后台的容器.使用attach命令.
3.9.强制删除所有容器方法
docker container rm -f `docker container ls -a -q`
3.10.进一个正在运行的守护式容器
通过开启子进程的方法
docker container exec -it 7d4bec0203da /bin/bash
3.11.端口映射
宿主机所有IP地址指定端口号
docker container run -d --name="n1" -p 8080:80 nginx:1.17
宿主机指定IP和端口
docker container run -d -p 192.168.0.122:8081:80 --name="n2" nginx:1.17
结果
[root@ecs-x-large-4-linux-20200317144346 ~]# ss -lnt|grep 80
LISTEN 0 1024 192.168.0.122:8081 *:*
LISTEN 0 1024 [::]:8080 [::]:*
映射多个端口
docker container run -d -p 8082:80 -p 443:443 --name="n3" nginx:1.17
3.12.查看docker进程
[root@ecs-x-large-4-linux-20200317144346 ~]# docker container top 5ac3b49b59b9
UID PID PPID C STIME TTY TIME CMD
root 27626 27609 0 10:22 ? 00:00:00 nginx: master process nginx -g daemon off;
101 27652 27626 0 10:22 ? 00:00:00 nginx: worker process
3.13.查看容器日志
docker container logs ce1078c20f51
docker container logs -t --tail=10 ce1078c20f51
四.容器数据卷使用
所有的数据变更.都是在容器生命周期里.容器一销毁,所有数据都没了.镜象是只读了文件系统
4.1.宿主机和容器的数据拷贝
可以宿主机-->容器,也能容器--->宿主机
docker container cp index.html n1:/usr/share/nginx/htm
命令用法
[root@ecs-x-large-4-linux-20200317144346 ~]# docker container cp --help
Usage: docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
4.2.volume实现宿主机的数据共享
法一.挂载时,使用-v参数
docker container run -d --name="nginx_v1_80" -v /data/www/:/usr/share/nginx/html -p80:80 nginx:1.17
法二.挂容器
使用专门用来挂载的容器,当中间媒介,把所有的需要挂载的数据卷挂上.其它服务类的容器,在来挂载这个容器.避免命令过长,过多问题.适应集群.
先运行挂载容器
docker container run -it --name="volume docker" -v /data/www/a:/opt/a -v /data/www/b:/opt/b centos:latest
其它容器在挂上面的数据卷容器
docker container run -d -p 80:80 --volumes-from volume_docker --name="nginx_80_80" nginx:1.17
五.镜象制作
5.1.基于容器制作镜象
容器优化后,把当前在状态保存下来
A.启动基础镜象容器.
docker container run -it --name="volume docker" -v /data/www/a:/opt/a -v /data/www/b:/opt/b centos:latest
B.安装所需的软件包
C.制作镜象
docker container run -it --name="volume docker" -v /data/www/a:/opt/a -v /data/www/b:/opt/b centos:latest