Docker基础知识

目录

  • 安装Docker
  • 常用命令
  • 安装常用软件
  • Docker-Compose

安装Docker

centos6.8安装docker
	1.安装依赖包					yum install -y epel-release
	2.安装Docker					yum install -y docker-io
	3.查看配置文件				cat /etc/sysconfig/docker
	4.启动后台服务				service docker start
	5.查看版本					docker version

centos7安装docker
	1.安装gcc				yum -y install gcc gcc-c++
	2.卸载旧版本				yum -y remove docker docker-common docker-selinux docker-engine
	3.安装需要的软件包			yum install -y yum-utils device-mapper-persistent-data lvm2
	4.设置stable镜像仓库 		yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	5.更新yum软件包索引		yum makecache fast
	6.安装docker 			yum -y install docker-ce
	7.启动docker 			systemctl start docker
	8.查看版本				docker version
	9.配置镜像加速			
							mkdir -p /etc/docker
							vim /etc/docker/daemon.json 
								{
								  "registry-mirrors": ["https://lw6hnysy.mirror.aliyuncs.com"]
								}
							systemctl daemon-reload
							systemctl restart docker
	10.卸载docker
							systemctl stop docker
							yum -y remove docker-ce
							rm -rf /var/lib/docker

常用命令

docker version
docker info
docker --help
docker images
docker search 某个XXX镜像名字
docker pull 镜像名字[:TAG]
docker rmi -f 镜像名1:TAG 镜像名2:TAG
docker start 容器ID或者容器名
docker restart 容器ID或者容器名
docker stop 容器ID或者容器名
docker kill 容器ID或者容器名
docker rm 容器ID
docker login -u username -p password server
Docker Hub:docker login -u username -p password 
Aliyun:docker login -u username -p password registry.cn-beijing.aliyuncs.com
docker push server/namespace/image:tag
启动交互式容器:						docker run -it centos /bin/bash 
启动守护式容器:						docker run -d -p 3306:3306 --name mysql01 mysql:5.6
查看容器日志:						docker logs -f -t --tail 容器ID
查看容器内运行的进程:					docker top 容器ID
查看容器内部细节:						docker inspect 容器ID
进入正在运行的容器并以命令行交互:		docker exec -it 容器ID /bin/bash
重新进入:							docker attach 容器ID
从容器内拷贝文件到主机上:				docker cp  容器ID:容器内路径 目的主机路径
docker login -u username -p password address(192.168.29.100:80)


docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
	--name="容器新名字": 为容器指定一个名称;
	-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
	-i:以交互模式运行容器,通常与 -t 同时使用;
	-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
	-P: 随机端口映射;
	-p: 指定端口映射,有以下四种格式
		  ip:hostPort:containerPort
		  ip::containerPort
	
docker ps [OPTIONS]
	-a :列出当前所有正在运行的容器+历史上运行过的
	-l :显示最近创建的容器。
	-n:显示最近n个创建的容器。
	-q :静默模式,只显示容器编号。
	--no-trunc :不截断输出。

退出容器:
	exit:		容器停止退出
	ctrl+P+Q:	容器不停止退出
	
Docker镜像commit操作:
	docker commit提交容器副本使之成为一个新的镜像
	docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
	docker search tomcat
	docker pull tomcat
	docker run -it -p 8080:8080 --name tomcat01 tomcat
	故意删除上一步镜像生产tomcat容器的文档,以它为模板commit一个没有doc的tomcat新镜像gaoxiang/tomcat
	docker commit -m=“del tomcat docs” -a=“gaoxiang” d536a5c3 gaoxiang/tomcat:1.2
	docker images:会出现创建的镜像
	
Docker容器数据卷:
	容器内添加:		
		docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
		查看数据卷是否挂载成功:	docker inspect 容器ID
		命令(带权限):				 docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
	DockerFile添加:
		根目录下新建mydocker文件夹并进入
		可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
		File构建:vim dockerfile2
				# volume test
				FROM centos
				VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
				CMD echo "finished,--------success1"
				CMD /bin/bash
		build后生成镜像,获得一个新镜像gaoxiang/centos:docker build -f /mydocker/dockerfile2 -t gaoxiang/centos . 
		查看创建的镜像:docker images
		run容器:		docker run -it gaoxiang/centos /bin/bash
		Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
		解决办法:在挂载目录后多加一个--privileged=true参数即可

DockerFile体系结构(保留字指令)
	FROM
		基础镜像,当前新镜像是基于哪个镜像的
	MAINTAINER
		镜像维护者的姓名和邮箱地址
	RUN
		容器构建时需要运行的命令
	EXPOSE
		当前容器对外暴露出的端口
	WORKDIR
		指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
	ENV
		用来在构建镜像过程中设置环境变量
	ADD: 拷贝加解压缩
		将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
	COPY
		类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
	VOLUME
		容器数据卷,用于数据保存和持久化工作
	CMD
		指定一个容器启动时要运行的命令
		Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
	ENTRYPOINT 
		指定一个容器启动时要运行的命令
		ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
	ONBUILD
		当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
		
DockerFile解析:
	构建三步骤:编写Dockerfile文件->docker build->docker run
	自定义镜像Tomcat9:
		mkdir -p /gx/mydockerfile/tomcat9
		在上述目录下touch c.txt
		将jdk和tomcat安装的压缩包拷贝进上一步目录
		在/gx/mydockerfile/tomcat9目录下新建Dockerfile文件:
			FROM         centos
			MAINTAINER    gaoxiang
			#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
			COPY c.txt /usr/local/cincontainer.txt
			#把java与tomcat添加到容器中
			ADD jdk-8u171-linux-x64.tar.gz /usr/local/
			ADD apache-tomcat-9.0.8.tar.gz /usr/local/
			#安装vim编辑器
			RUN yum -y install vim
			#设置工作访问时候的WORKDIR路径,登录落脚点
			ENV MYPATH /usr/local
			WORKDIR $MYPATH
			#配置java与tomcat环境变量
			ENV JAVA_HOME /usr/local/jdk1.8.0_171
			ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
			ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
			ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
			ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
			#容器运行时监听的端口
			EXPOSE  8080
			#启动时运行tomcat
			# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
			# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
			CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
		构建:docker build -t gxtomcat9 .
		run容器:	docker run -d -p 9080:8080 --name myt9 -v /gx/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /gx/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true gxtomcat9

安装常用软件

Docker安装Tomcat:
	docker search tomcat
	docker pull tomcat
	docker run -p 8080:8080 --name tomcat8080 -d tomcat

Docker安装Mysql
	docker search mysql
	docker pull mysql:5.6
	docker run -p 12345:3306 --name mysql -v /gx/mysql/conf:/etc/mysql/conf.d -v /gx/mysql/logs:/logs -v /gx/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
		命令说明:
		-p 12345:3306:将主机的12345端口映射到docker容器的3306端口。
		--name mysql:运行服务名字
		-v /gx/mysql/conf:/etc/mysql/conf.d :将主机/gx/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
		-v /gx/mysql/logs:/logs:将主机/gx/mysql目录下的 logs 目录挂载到容器的 /logs。
		-v /gx/mysql/data:/var/lib/mysql :将主机/gx/mysql目录下的data目录挂载到容器的 /var/lib/mysql 
		-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
		-d mysql:5.6 : 后台程序运行mysql5.6
	数据备份小测试:
		docker exec myql服务容器ID sh -c ' exec mysqldump --all-databases -uroot -p"123456" ' > /gx/all-databases.sql	

Docker安装Redis:
	docker pull redis:3.2
	docker run -p 6379:6379 -v /gx/myredis/data:/data -v /gx/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf  -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
	在主机/gx/myredis/conf/redis.conf目录下新建redis.conf文件
		vim /gx/myredis/conf/redis.conf/redis.conf
	测试redis-cli连接上来:docker exec -it 运行着Rediis服务的容器ID redis-cli

Docker安装ES
	docker search elasticsearch
	docker pull elasticsearch
	docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p  9200:9200 -p 9300:9300 --name ES9200 elasticsearch

Docker安装RabbitMq
	docker search rabbitmq:3-management
	docker pull rabbitmq:3-management
	docker run -d -p 5672:5672 -p 15672:15672 --name rabitmq15672 rabbitmq:3-management

Docker-Compose

安装docker-compose
	curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
	chmod +x /usr/local/bin/docker-compose
常用命令
	docker-compose up				# 前台运行
	docker-compose up -d			# 后台运行
	docker-compose start			# 启动
	docker-compose stop				# 停止
	docker-compose down				# 停止并移除容器

docker-compose-mysql.yml
version: '3.1'
services:
  db:
    image: mysql:8.0.20
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
  
docker-compose-tomcat.yml
	version: '3.1'
	services:
	  tomcat:
	    restart: always
	    image: tomcat
	    container_name: tomcat
	    ports:
	      - 8080:8080
	    volumes:
	      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
	    environment:
	      TZ: Asia/Shanghai

docker-compose-nexus.yml
	version: '3.1'
	services:
	  nexus:
	    restart: always
	    image: sonatype/nexus3
	    container_name: nexus
	    ports:
	      - 8081:8081
	    volumes:
	      - nexus-data:/nexus-data
	volumes:
	   nexus-data:

docker-compose-gitlab.yml   用户名默认是root
version: '3'
services:
    web:
      image: 'twang2218/gitlab-ce-zh:11.1.4'
      restart: always
      hostname: '192.168.219.128'
      container_name: 'gitlab'
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url '192.168.219.128:8082'
          gitlab_rails['gitlab_shell_ssh_port'] = 2222
          unicorn['port'] = 8888
          nginx['listen_port'] = 80
      ports:
        - 8082:80
        - 443:443
        - 2222:2222
      volumes:
        - ./config:/etc/gitlab
        - ./data:/var/opt/gitlab
        - ./logs:/var/log/gitlab
	    
harbor:
	https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz
	tar -zxvf harbor-offline-installer-v2.0.0.tgz
	cd harbor
	vim harbor.yml
		hostname: 192.168.219.128
		# 第 12 行,注释掉 HTTPS 的相关配置
		# https related config
		# https:
		  # https port for harbor, default is 443
		  # port: 443
		  # The path of cert and key files for nginx
		  # certificate: /your/certificate/path
		  # private_key: /your/private/key/path
	./install.sh
	账号:admin
	密码:Harbor12345
	# 配置客户端
	vim /etc/docker/daemon.json
		{
		  "registry-mirrors": [
		    "https://lw6hnysy.mirror.aliyuncs.com"
	 	  ],
		  "insecure-registries": [
		    "192.168.219.128"
		  ]
	}
	# 构建项目(ip:port/image_name:tag)
	vim Dockerfile
		FROM java:8
		ADD hello_world-0.0.1-SNAPSHOT.jar /hello.jar
		EXPOSE 8080
		CMD ["java","-jar","/hello.jar"]
	docker build -t 192.168.219.128/hello:latest .
	# 运行项目
	docker run -d -p 8080:8080 hello
	# 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
	docker tag 192.168.219.128/hello:latest 192.168.219.128/library/hello:1.1.1
	# 推送项目
	docker push 192.168.219.128/library/hello:1.1.1
	

你可能感兴趣的:(Docker,Linux,Docker)