

五分钟快速入门 实战 Docker,工作这些命令就够用了
source link: https://my.oschina.net/u/4455409/blog/5027248
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

现在很多公司项目部署都是采用K8S docker容器方式,出门面试被问的概率极大,如果被面试官问docker相关知识点直接懵逼,那么基本就是被pass了,除非其他方面技术过硬。所以这种相对前沿的技术,就算达不到精通的程度,起码还是要了解基础理论和操作
一.安装docker
Docker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上
-
uname -an
查看当前系统版本 -
yum -y install docker
下载安装docker -
service docker start
启动docker服务 -
docker version
检查docker是否安装成功
当看到下图的信息,就是表示本机docker已经安装成功,很简单
在这里插入图片描述
二.镜像操作
创建容器要以镜像为基础,所以先讲下docker镜像的操作
搜索镜像
docker images ll
查看下本机的是否已经有了镜像
目前机器里还没有镜像,去Docker Hub下载(镜像还可自定义,这里就不细说了)
docker search java
,还能指定具体的版本进行下载,
例如:docker search Ubuntu:1.2.5.4,可以进行搜docker Hub 会列出很多镜像
在这里插入图片描述
下载镜像
docker pull docker.io/nginx
进行下载
下载到本地的镜像要比docker Hub上搜索出来的要大,因为下载过程中自动解压了,在查看镜像列表就有了刚才下载的镜像
列表包含了仓库名,版本标签,镜像ID,创建时间以及所占用的空间
在这里插入图片描述
删除镜像
删除没用的镜像docker rmi 镜像id
在这里插入图片描述
三.容器的操作
前边我们已经下载好了Nginx的镜像,接下来我们就创建一个只有Nginx应用的容器
docker run -i -t /bin/bash
-i
:标准输入给容器-t:
分配一个虚拟终端/bin/bash:
执行bash脚本
docker run -idt --name container_nginx -p 8080:80 docker.io/nginx
启动一个使用镜像docker.io/nginx
,名字container_nginx
的容器,-p 8080:80
表示将容器的80端口映射到主机的8080端口,这样我们只要访问主机的8080端口就可以访问到容器的服务了。
注意:name
前面是两个-
, 端口前面有-p
, docker.io/nginx
是镜像名,8080
是主机的端口,80
是Nginx应用的端口
主机上的一个端口只能映射一个容器端口,不可以多个容器端口对应一个主机端口(如果容器安装的centos类的系统,那么容器端口随便设定,但如果容器内只是单纯的应用,那么容器端口要是应用自身的端口)
在这里插入图片描述
这样我们就创建并启动了一个容器!
exit
退出容器
docker ps
查看运行中的容器
docker ps -a
查看运行中和非运行中的所有容器
docker exec -it container_nginx /bin/bash
进入容器如果容器还未启动 执行
docker start container_nginx
进入容器后启动Nginx
whereis nginx 找Nginx的启动目录
[root@iz2zehzeir87zi8q99krk1z ~]# docker start container_nginx
container_nginx
[root@iz2zehzeir87zi8q99krk1z ~]# docker exec -it container_nginx /bin/bash
root@84683e425116:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@84683e425116:/# /usr/sbin/nginx
此时在浏览器访问 http://51.110.218.9:8080/ 就可以直接访问容器内的Nginx
在这里插入图片描述
如果访问不成功,可能是主机端口的防火墙开着,执行下边的命令关闭
/ sbin / iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
由于我用的阿里云服务器,所以需要在阿里云把8080端口开放
在这里插入图片描述
删除容器
容器删除之前先将容器停止
docker stop container_nginx
或者是容器的id
docker rm -f container_nginx
容器删除
docker start 与 docker run 的区别
docker start name
启动一个已经创建的容器
docker run
创建并启动一个容器
docker run
命令其实是 docker create
和 docker start
的命令组合,先执行docker create
创建一个容器 再接着docker start
启动
主机和容器文件相互复制
从主机复制到容器 sudo docker cp host_path containerID:container_path
从容器复制到主机 sudo docker cp containerID:container_path host_path
请注意,以上这两个命令都是在主机中执行的,不能再容器中执行
docker cp container_nginx:/usr/local/xin.txt /usr/local/software/ 容器向主机复制文件
docker cp /usr/local/xinzhifu.txt container_nginx:/usr/local/ 主机向容器复制文件
这样一个基础的docker容器就创建完了 。。。。。。。。。。。。
反过来大家再看一看docker的容器与镜像的区别 https://www.cnblogs.com/linjiaxin/p/7381421.html
那么其实镜像与容器的本质区别并不大,那么镜像可以生成容器 ,容器是否可以做成镜像呢?
docket commit container_nginx image_nginx:v1
在这里插入图片描述
container_nginx
容器名image_nginx:v1
自己起一个镜像的名字:版本号
这样做有什么好处呢?
例如:A、B两台机器都想安装redis,A机器上创建容器并在容器中做好redis的一切配置,让后将这个容器docker commit 成镜像image_redis,B机器也想要安装redis,直接用镜像image_redis创建容器就行了,docker就是做这样一劳永逸的事情。
而且传统方式得在每台机器上安装配置redis非常麻烦
四.镜像的导入与导出
镜像压缩打包 (主机上进行操作),有两种方式 docker save
与 docker load
和 docker export 与 docker import
docker save nginx | gzip > nginx_xin_image.tar.gz 将现有的镜像压缩打包
docker load -i nginx_xin_image.tar.gz 压缩的镜像解压
docker images 进行查看
docker save
是直接将镜像进行打包 docker save <镜像名>或<镜像id>
docker export container_nginx> nginx_image.tar
cat nginx_image.tar | sudo docker import - nginx_image:import
docker export
是直接将容器进行打包 docker export <容器名>或<容器id>
需要注意两种方法配套的,切不可混用。虽然导入导出时没问题,但是在创建容器时候会报错
如果使用import导入save产生的文件,虽然导入不提示错误,但是启动容器时会提示失败,
会出现类似"docker: Error response from daemon: Container command not found or does not exist"的错误。
类似,使用load载入export产生的文件,也会出现问题。
先写到这,文章略显粗糙,希望对您有一点用,学无止境加油!
整理了几百本各类技术电子书,有需要的同学公号[ 程序员内点事 ]内回复[ 666 ]自取。技术群快满了,想进的同学可以加我好友,和大佬们一起吹吹技术。
Recommend
-
72
酷工作 - @wingjay - 工作时间发给我的话,五分钟帮你内推,第一时间给你反馈(内网能收到面试结果邮件)。岗位查询: https://job.alibaba.com/zhaopin/index.htm内推邮箱:
-
46
VimScript 五分钟入门(翻译)
-
27
挺早以前在我写过一篇用 Docker 搭建LNMP开发环境的文章:
-
18
挺早以前在我写过一篇用 Docker 搭建LNMP开发环境的文章:
-
11
艾小仙 前两天在一个技术群,有人还在问maven中groupId、artifactId、version这些关键字的含义是什么,于是,我觉得还是很有必要来聊聊Maven中的这些核心概念。 成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
-
9
云原生 PostgreSQL 集群 - PGO:五分钟快速上手-51CTO.COM 云原生 PostgreSQL 集群 - PGO:五分钟快速上手 作者:为少 2022-02-23 20:38:32 本篇带给大家五分钟快速安装并创建PostgreSQL 集群的...
-
4
五分钟教你快速完成Amazon危险品审核的窍门
-
9
窃取450G的AMD内部数据,这些黑客可能只用了五分钟?!-51CTO.COM 窃取450G的AMD内部数据,这些黑客可能只用了五分钟?! 作者:文摘菌 2022-06-30 12:44:48 根据Restore Privacy报告...
-
4
文章正文: 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。...
-
10
作者:京东物流 覃玉杰 1. pie 简介 责任链模式是开发过程中常用的一种设计模式,在SpringMVC、Netty等许多框架中均有实现。我们日常的开发中如果要使用责任链模式,通常需要自己来实现,但自己临时实现的责任链既...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK