docker初步学习

1、安装docker

yum install docker,安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

1)service docker start

2)chkconfig docker on

3)测试docker是否安装成功:docker version

因为国内连接 Docker 的官方仓库很慢,因此我们在日常使用中会使用Docker 中国加速器。通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可通过 registry.docker-cn.com访问。该镜像库只包含流行的公有镜像,私有镜像仍需要从美国镜像库中拉取。

修改系统中docker对应的配置文件即可,如下:

1)vi /etc/docker/daemon.json

2)添加如下

{
"registry-mirrors":["https://registry.docker-cn.com"],
"live-restore":true
}

3)运行下面的命令,将 image 文件从仓库抓取到本地。

docker pull library/hello-world

拉取镜像:docker pull image_name(镜像的名字,如tomcat,java,mysql,nginx等等)

上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。

抓取成功以后,就可以在本机看到这个 image 文件了。

查看镜像:docker images

删除镜像:docker rmi docker.io/tomcat:7.0.77-jre7 或者 docker rmi b39c68b7af30

查看所有容器:docker ps -a

4)docker 命令大全

容器生命周期管理

1、run

docker run:创建一个新的容器并运行一个命令

语法:docker run [options] image [command][arg...]

options某些说明:

-d:后台运行容器,并返回容器id;

-i:以交互模型运行容器,通常与-t 同时使用;

-p:端口映射,格式为:主机(宿主)端口:容器端口;

-t:为容器重新分配一个伪输入终端,通常与-i 同时使用;

--name="nginx-lb":为容器指定一个名称;

--dns 8.8.8.8:指定容器使用的dns服务器,默认和宿主机一致;

-h "mars":指定容器的hostname;

-e username="ritchie":设置环境变量;

--env-file=[]:从指定文件读入环境变量;

-m:设置容器使用内存最大值;

--expose=[]:开放一个端口或一组端口;

实例:

a、使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx,如下:

docker run --name mynginx -d nginx:latest

b、使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口

docker run -p -d nginx:latest

c、绑定容器的8080端口,并将其映射到本机127.0.0.1的80端口

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

2、start/stop/restart

docker start:启动一个或多个已经被停止的容器

docker stop:停止一个运行中的容器

docker restart:重启容器

语法:

docker start [options] container [container...]

docker stop [options] container [container...]

docker restart [options] container [container...]

实例:

docker start myrunoob;

docker stop myrunoob;

docker restart myrunoob;

3、kill

docker kill:杀掉一个运行中的容器。

语法:docker kill [options] container [container...]

options说明:-s 向容器发送一个信号

实例:杀掉运行中的容器mynginx:docker kill -s kill mynginx

4、rm

docker rm:删除一个或多个容器

语法:docker rm [options] container [container...]

options说明:

-f:通过sigkill信号强制删除一个运行中的容器

-l:移除容器见的网络连接,而非容器本身

-v:删除与容器关联的卷

5、pause、unpause

docker pause:暂停容器中所有的进程

docker unpause:回复容器中所有的进程

语法:

docker pause [options] container [container...]

docker unpause [options] container [container...]

6、create

docker create:创建一个新的容器,但不启动它

语法:docker create [options] image [command][arg...]

实例:使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob

docker create --namee myrunoob nginx:latest

7、exec

docker exec:在运行容器中执行命令

语法:

docker exec [options] container command [arg...]

options说明:

-d:分离模式,在后台运行

-i:及时没有附加也保持stdin打开

-t:分配一个伪终端

容器操作

1、ps

docker ps:列出容器

语法:

docker ps [options]

options说明:

-a:显示所有的容器,包括未运行的

-f:根据条件过滤显示的内容

--format:指定返回的模板文件

-l:显示最近穿件的容器

-n:列出最近创建的n个容器

--no-trunc:不截断输出

-q:静默模式,只显示容器编号

-s:显示文件的大小

2、inspect

docker inspect:获取容器/镜像的元数据

语法:docker inspect [options] name | id [name|id]

options说明:

-f:指定返回值的模板文件

-s:显示总的文件大小

--type:为指定类型返回json

 3、top

docker top:查看容器中运行的进程信息,支持ps命令参数

语法:docker top [options] container [ps options]

4、attach

docker attach:连接正在运行中的容器

语法:docker attach [options] container

要attach上去 电容器必须正在运行,可以同时连接上同一个container来共享屏幕。

5、events

docker events:从服务器活肤实时事件

语法:docker events [options]

options说明:

-f:根据条件过滤事件

--sunce:从指定的时间戳后显示所有事件

--until:流水事件显示到指定的时间为止

6、logs

docker logs:获取容器的日志

语法:docker logs [options] container

-f:跟踪日志输出

--since:显示某个开始时间的所有日志

-t:显示时间戳

--tail:仅列出最新N条容器日志

7、export

docker export:将文件系统作为一个tar归档文件导出到stdout

语法:docker export [options] container

-o:将输出内容写到文件

容器rootfs

1、commit

docker commit:从容器创建一个新的镜像

语法:docker commit [options] container [repository[:tag]]

-a:提交的镜像作者

-c:使用dockerfile指令来创建镜像

-m:提交时的说明文字

-p:在commit时,将容器暂停

2、cp

docker cp:用于容器与主机之间的数据拷贝

语法:docker cp [options] container : src_path dest_path|-

docker cp [options] src_path|- container:dest_path

-L:保持原目标中的链接

镜像仓库

1、pull

docker pull:从镜像仓库中拉去或者更新指定镜像

语法:docker pull [options] name[:tag|@digest]

-a:拉去所有tagged镜像

--disable-content-trust:忽略镜像的检验,默认开启

实例:从docker hub下载java的所有镜像:docker pull -a java

2、search

docker search:从docker hub 查找镜像

本地镜像管理

1、images

docker images:列出本地镜像

2、rmi

docker rmi:删除本地一个或多个镜像

docker rmi [options] image [image...]

-f:强制删除

--no-prune:不移除该镜像的过程镜像,默认移除

3、build

docker build:用于使用Dockerfile创建镜像

docker build [options] path | url | -

4、save

docker save:将制定镜像保存成tar归档文件

docker save [options] image [image...]

5、import

docker import:从归档文件中创建镜像

docker import [options] file|url | - [repository[:tag]]

-c:应用docker指令创建镜像

-m:提交时的说明文字

version

1、docker version:显示docker版本信息

docker version [options]

-f:制定返回值的模板文件

使用mysql镜像

运行mysql容器:

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 端口。

  • -v -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 用户的密码。

docker 容器启动失败的解决办法

https://blog.csdn.net/Hello_World_QWP/article/details/81147307

注意:如果docker启动不了,或者docker启动mysql、Tomcat等镜像报错,那么先将docker删除掉,通过上面链接所示,重新安装docker

1、先安装必要工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装docker-se:sudo yum -y install docker-ce

4、如果没有 /etc/docker/daemon.json文件,则添加文件,在其中添加如下信息:

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

5、启动docker,拉取镜像,运行镜像。

6、以上启动容器之后,如果重启服务器,那么docker需要重新启动,执行chkconfig docker on后台启动docker,方可在服务器重启后自动启动。

启动mysql

1、创建用于挂载的目录

mkdir –p /data/mysql/logs /data/mysql/conf /data/mysql/data

2、启动mysql

docker run -p 3306:3306 --name mysql57-1 -v /data/mysql/data/:/var/lib/mysql -v /data/mysql/conf/:/etc/mysql/conf.d -v /data/mysql/logs/:/logs -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:5.7

这样只要运行一个数据库的容器,挂载到该目录,那么该数据库都能操作这些数据

启动centos容器(搭建javaweb运行环境)

1、创建需要挂载的目录

/data/centos7

2、启动centos7

docker run -i -t --privileged=true --name centos7-1 -v /data/centos7/:/data/centos7/ 9f38484d220f /bin/bash

说明:

-i:表示以“交互模式”运行容器

-t:表示容器启动后会进入命令行

-v:表示将本地那个目录挂载在容器中(本地创建的目录中放入jdk和Tomcat然后挂载在容器中的目录(如果这个目录没有创建,则会自动创建),然后在容器的这个目录中,便能获取到jdk和Tomcat了)

--privileged=true:容器家持权

/data/centos7/:挂载目录,可以自定义,确保jdk和Tomcat在目录下,否则容器获取不到

/bin/bash:???

3、安装jdk和Tomcat

1)将jdk和tomcat分别复制到/usr/local/ 目录下的tomcat目录和jdk目录,然后在通过tar zxvf解压

说明:x:从tar中将文件提取出来,z:tar包被gzip压缩过的,所以解压时需要gunzip,v:显示详细信息,f:指定被处理过的文件是xxx.tar.gz

2)配置环境变量,vim  /etc/profile,然后在最后面添加如下:
export JAVA_HOME=“jdk的目录”/jdk1.8.0_171 

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

jdk的目录:我的是在/usr/local/jdk

3)source /etc/profile:使修改的配置立即生效或运行:.  /etc/profile

4)java -version 查看是否配置成功

4、编辑 .bashrc 文件

vi ~/.bashrc #配置.bashrc文件(不知道如何配置,先未配置)

source ~/.bashrc #使.bashrc文件有效

编写运行脚本,当容器启动时,运行脚本,启动tomcat

vi /root/run.sh #创建运行脚本

脚本内容如下:

#!/bin/bash  
source /etc/profile #尝试过启动centos,但是java -version却不行,因此此配置是确保配置文件生效
source ~/.bashrc  #这句话不知道为什么
sh /usr/local/apache-tomcat-7.0.73/bin/catalina.sh run

添加脚本执行权限:chmod u+x /root/run.sh

退出容器:exit

5、创建javaweb镜像

使用以下命令,根据某个“容器 ID”来创建一个新的“镜像”

docker commit 910e269944da zzl/javaweb:0.1

说明:910e269944da,centos容器id,zzl/javaweb镜像名称,0.1:tag版本

docker images查看镜像,能看到镜像说明创建成功

6、启动javaweb容器

docker run -d -p 8080:8080 --name javaweb zzl/javaweb:0.1 /root/run.sh

安装完成,访问 http://192.168.169.130:8080

7、当centos停止后,启动centos容器后,可以通过:docker exec -i -t centos7-1 /bin/bash  命令进入容器命令行

8、经过几次尝试后,可以这样做:

1)安装上面方式pull centos7后其中安装jdk和tomcat后,创建javaweb镜像

2)使用这个javaweb镜像创建容器,命令如下:

docker run -p 8080:8080 --name xiaokedou -v /data/centos7/:/data/centos7/ -d javaweb-xiaokedou:0.2 /root/run.sh

说明:在宿主机上创建一个tomcat的webapps目录,这个目录中必须要有tomcat下webapps里面的基本文件,然后将该文件挂载到javaweb容器中的tomcat里的webapps目录下,这样直接将打包文件部署到宿主机上的webapps目录下即可完成项目部署

3)可以通过:docker exec -it xiaokedou1 /bin/bash,命令进入到容器命令行

猜你喜欢

转载自blog.csdn.net/qq_37978623/article/details/89418862
今日推荐