Docker 第一次学习

kitematic没碰

Debian是完全由自由软件组成的类UNIX操作系统

netstat查看网络

网易蜂巢(可以获得国内镜像并且查看配置文件信息)

慕课网另一个同学的笔记

https://github.com/endlif/GitCode/blob/master/docker/README.md

这个可以当手册查看很全后面的都没学

https://yeasy.gitbooks.io/docker_practice/install/experimental.html

homebrew改了镜像

https://blog.csdn.net/JerryWu145/article/details/86214908

用brew doctor来查看状况

有些过期的就untap就OK了

http://laker.me/blog/2019/05/03/19_0503_homebrew_problem/

brew install tree 安装了个树形结构查询文件

安装了个wget

把Nginx里面三个配置文件分别映射出在宿主机

这样以后只用改外面的文件夹就相当于修改了里面

https://juejin.im/post/5cd5288e6fb9a032125071a6

sudo mkdir -p /nginx/{conf,conf.d,html,logs} 

最新国内下载地址

http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/

docker加速地址

https://www.jianshu.com/p/405fe33b9032

/ bin / bash,那么你告诉你的系统使用bash作为默认的shell

docker login

docker ps看正在用的容器

docker ps -a 看所有已经停止了但是没删除的容器

docker images看镜像

docker pull hello-world

docker run hello-world

docker run -i hello-world  (interaction)

docker run -it hello-world  (t-tty打开终端)

docker container run --rm -p 8000:3000 -it koa-demo /bin/bash

--rm参数,在容器终止运行后自动删除容器文件

docker top +id/name查看容器内部运行的进程

docker attach

   # docker run -p 83:80 -d  --name=nginx-4 nginx 

    # docker attach nginx-4

    //本机上再打开一个终端,输入以下命令,观察上面终端的输出

    # curl localhost:83  // nginx输出正常访问记录

    # curl localhost:84/index  // nginx输出访问错误记录

docker  rm +id删除一个容器

docker rmi +id删除一个镜像

docker rmi $(docker images -q)删除所有镜像

docker rm $(docker ps -a -q)删除所有容器

docker stop $(docker ps -a -q)停止所有容器

docker exec -it +id /bin/bash运行的容器中      (进入容器如何安全退出(退出后容器不关闭),依次按ctrl+p,ctrl+q)

(进去可以用which nginx查看这个Nginx其实也是运行在本地的Linux下/usr/sbin/nginx

 ps -ef查看当前有哪些进程,,,如果不行先输入这句apt-get update && apt-get install procps)

docker history +id/名称查看每一层大小

 --net host 参数(没试过)

https://note.youdao.com/ynoteshare1/index.html?id=0d12819002db9df5127aa43b209f6f06&type=note

挂载一个卷的步骤:

1.docker run -it -v /test zwsnail/test /bin/bash            要用外面宿主机的一个来自Mac虚拟机alpine里面的一个位置文件夹来挂/test(-volume的意思)

-v /root/test:/容器id:为这个容器绑定一个host宿主机root下面的test文件夹

touch /test/volume.txt在容器里面创建个文件 

docker volume rm vm_test删除卷

docker volume ls查看挂载卷的目录

docker volume create vm_test重新命名vm_test

docker run -it --mount source=vm_test,target=/test zwsnail/test  /bin/bash挂在容器上

-d 允许这个程序直接返回,把这个容器作为守护进程执行

下载一个busybox因为很多Linux语句不支持在docker里面,比如ping nginx查看网络连接和ifconfig看ip

/bin/busybox ifconfig

容器之间互联了;

docker network ls  创建一个网络;

docker network rm必须要把上面的容器拿掉才能删除

docker network create test创建一个测试网络

通过attach命令可以重新attach一个后台运行的container

通过docker inspect {container_id}来获取container的更多的信息,包括网络,volume,实际在host上的进程id等信息

如果最开始忘了指定端口,可以把当前容器变成一个镜像「a是指定作者,-m是写段话,ngingx_rongqi是之前容器的名字,aaa是新的镜像名,后面是tag版本」

docker commit -a "author_zoe" -m "new_image" nginx_rongqi aaa:v1 

然后重新指定端口开启这个镜像

docker run -it --name web_demo -p 8000:80  aaa:v1  /bin/bash

[root@docker ~]# docker run -it -v /data -h wadeson saltstack/ubuntu-14.04

root@wadeson:/# ls

bin  boot  data  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

-i:交互模式,直接进入到container容器中

-t:tty,伪终端,虚拟终端

  -h wadeson:指定为container设置hostname

  -v /data:container内的/data为挂载点

查看data目录:

root@wadeson:/# ls /data/

root@wadeson:/# 

-------------------------------------

记录重新改写Nginx首页的过程

桌面有个desktop_docker的文件夹,里面有个index.html文件,用这个改写

1.先开一个Nginx

docker run -p 8080:80 -d nginx

2.把桌面文件拷贝进去

docker cp desktop_docker/index.html 5a2cd6cd2880://usr/share/nginx/html

---------------------------------------

自己写个Dockerfile运行

1.建个文件夹来装

mkdir haha

2.进入

cd haha

3.创建Dockerfile

touch Dockerfile

4.用编辑器vim编辑

vim Dockerfile 

注意* 先按i进去编辑模式,

FROM alpine:latest  (相当于pull这个最新版本的alpine小型unix系统)

MAINTAINER zoe

CMD echo "Hi,zoe"

然后:wq退出保存

5.运行一个容器来使用里面写的内容

docker build -t zwnail .    (有个点,全小写)

Sending build context to Docker daemon  11.78kB

Step 1/3 : FROM alpine:latest

latest: Pulling from library/alpine

c9b1b535fdd9: Downloading 

latest: Pulling from library/alpine

c9b1b535fdd9: Pull complete 

Digest: sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d

Status: Downloaded newer image for alpine:latest

 ---> e7d92cdc71fe

Step 2/3 : MAINTAINER zoe

 ---> Running in 384c4e98b120

Removing intermediate container 384c4e98b120

 ---> a6b20b661b21

Step 3/3 : CMD echo "Hi,zoe"

 ---> Running in f4c363120241

Removing intermediate container f4c363120241

 ---> c1c6033a4e54

Successfully built c1c6033a4e54

Successfully tagged zwsnail:latest

再看images就多了一个自己创建的镜像

如果一直docker run zwsnail,就会一直增加container可以在gui里面看到

------------------------------------------------------

运行一个Ubuntu稍微复杂点的Dockerfile 

1.touch Dockerfile

2.vi Dockerfile

FROM ubuntu

MAINTAINER endlif

RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list      (改加速国内镜像)

RUN apt-get update  && \(加了这个会把几层汇成一层减小镜像体积)

RUN apt-get install -y nginx

COPY index.html /var/www/html     (下面这种写法的意思是进入exec[],进入shell内的运行模式)

ENTRYPOINT["/usr/sbin/nginx","-g","daemon off;"]      (以便nginx保持在前台,以便docker能够正确跟踪进程(否则启动后容器将立即停止)

EXPOSE 80

在前台执行而不是守护进程来执行是啥意思

前台执行是可见的,会占用当前termal窗口,使窗口不能再执行别的命令和任务,可以用control+c中断;守护进程就是可以在后台运行,由守护进程保证任务的不间断,当系统检测到守护进程中进程终止之后会自动再拉起这个进程或者任务,比如mysql的守护进程名字是mysqld,防火墙firwall的进程是firewalld,守护进程一般默认以进程+d结尾;也有一个软件叫做supervisor,可以用来进行进程守护)

3.touch index.html

4.vi index.html(随便写一句话)

5.docker build -t zoe/ubuntu .(有一点,自己取个image名字)

6.$docker run -d -p 80:80 zoe/ubuntu(要run上面镜像的名字)

7.curl http//:localhost

----------------------------------------------------------------------------------------------------------------

加载卷volume的三种方法

方法一

随机在alpine苹果电脑虚拟Linux系统alpine里面产生一个文件夹来挂

docker run -d --name nginx_rongqi -v /usr/share/nginx/html nginx  (不写d,终端就在那儿卡着不能写其他行,没有弄到后台去)

这个是Mac的地址

找到上面这个容器挂靠的文件夹对应到真实宿主机alpine虚拟机里面存储的位置:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty  (我靠这行不行用下面这行)

用这句话docker run -it --rm --privileged --pid=host justincormack/nsenter1

3.

cd可以查看inspect -> Mounts找到虚拟机里面的文件路径进去

ls查看里面有两个文件index和50x报错

4.可以cat下index文件,再更改

输入一段话来更改比如echo”啦啦啦“> index.html

用另一个terminal可以进去docker exec -it nginx_rongqi /bin/bash 

然后进入容器的文件夹root@bfa6fb93a328:/# cd usr/share/nginx/html

cat index.html 就可以看到里面变成了改动的 ”啦啦啦“

方法二

本地选定的一个文件夹来挂

比如当前目录的一个文件index.html就把Nginx里面原来默认的主页覆盖了

docker run -p 8080:80 -d -v $PWD:/usr/share/nginx/html nginx

/var/www/html不是对外端口!

(/usr/share/nginx/html应该就是Nginx对外的端口,放其他展示文件。

更改默认web目录

https://blog.csdn.net/xiaojie802/article/details/90286554

方法三

产生一个公用的容器当数据库,其他容器的数据都放这里

1.#宿主机目录:$PWD/data docker目录:/var/mydata  容器名:data_container基础镜像:ubuntu用create!!

docker create -v $PWD/data:/var/mydata --name data_container ubuntu

# -it表示使用交互的方式进入容器[默认ubuntu基础镜像没有服务]

2.docker run -it --volumes-from data_container ubuntu /bin/bash

#进入后执行mount,可以看到有/var/mydata目录的挂载信息

mount (进去之后输入这个可以看到很多,里面有个我们创建的目录,然后进去在里面touch一个txt,退出回头看data里面多了这个txt

上传到hub

1.先search一个然后run一个

2.然后贴标签docker tag docker/whalesay zoe/whalesay_test

push时即使账户密码正确也显示 [denied: requested access to the resource is denied]的问题

这里要注意一个问题,给自己镜像命名的时候格式应该是: docker注册用户名/镜像名,比如我的docker用户名为 test123,那么我的镜像tag就为 test123/whalesay,不然是push不上去的

3.docker login

4.docker push zoe/whalesay_test

docker-compose是独立的一个工具,但自带Mac和window出Linux环境

让image变小的方法,没有细研究

https://www.infoq.cn/article/3-simple-tricks-for-smaller-docker-images

GitHub 上star了一个ghost博客记得下下来看

叫做 dockerGgost已下载

你可能感兴趣的:(Docker 第一次学习)